跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

CCF-CSP 第 38 次认证真题解析:机器人移动范围计算

本题考察网格搜索算法,要求计算机器人在 n×n 网格中通过特定跳跃规则在 k 步内可达的方格总数。核心在于实现深度优先搜索,利用方向数组处理八种跳跃偏移,并通过访问标记数组避免重复计数。代码采用 C++ 编写,重点在于边界检查与递归终止条件的控制,确保在数据规模 n、k≤100 时高效运行。

蜜桃汽水发布于 2026/4/10更新于 2026/7/2445 浏览

题目背景

西西艾弗岛某山脉深处出土了一台远古机器人,初步修缮后研究人员尝试操控其进行简单移动。我们需要计算在特定规则下,机器人能抵达的方格数量。

题目描述

实验场地被划分为 n×n 个方格,坐标从 (1,1) 到 (n,n)。机器人只能在这些方格间移动,不能走出场地范围。假设机器人当前位于 (x,y),接下来可以向周围八个方向跳跃移动(如果目标方格在场地范围内)。

需要注意的是,根据代码实现逻辑,这里的'八个方向'实际上对应的是类似国际象棋中'马'的走法(即横向或纵向移动一格后再移动两格)。若机器人只能跳动不超过 k 步,场地内有多少方格(包括起始位置)可以抵达?

输入格式

从标准输入读入数据。

  • 第一行包含两个正整数 n 和 k,分别表示场地大小和跳动步数。
  • 第二行包含两个正整数 x 和 y,表示机器人的起始位置(保证位于场地内)。

输出格式

输出一个整数,表示 k 步内可以抵达的方格总数。

样例说明

样例 1 输入:4 1 1 1 输出:3

样例 2 输入:4 2 1 1 输出:8 解释:初始位置、第一步和第二步跳跃抵达的位置总计为 8。

子任务约束

  • 80% 的测试数据满足:k≤3;
  • 全部测试数据满足:n、k 均大于 0 且不超过 100。

解题思路

这是一个典型的网格搜索问题,可以使用 BFS 或 DFS 来解决。考虑到递归实现的简洁性,这里采用 DFS 方案。

在 DFS 实现中,步数作为递归函数的参数传递,每深入一层代表多跳一步。我们需要维护一个访问标记数组 st,防止重复访问同一个格子导致死循环或重复计数。全局变量 cnt 用于统计已访问节点的数量。

关键点在于方向数组的定义和边界判断。由于是跳跃移动,每次移动的偏移量是固定的,需要确保新坐标仍在 [1, n] 范围内。统计的节点数包括所有经过的位置,而不仅仅是终点。

代码实现

以下是基于 C++ 的完整实现,重点展示了方向数组的定义与递归终止条件。

#include <bits/stdc++.h>
using namespace std;

const int N = 110;
int n, k, x, y;
bool st[N][N]; // 记录访问状态
int dx[8] = {1, 2, 1, 2, -1, -2, -1, -2};
int dy[8] = {2, 1, , , , , , };
 cnt; 

{
    st[x][y] = ;
    cnt++;
     (num == k) ; 

     ( i = ; i < ; i++) {
         a = x + dx[i], b = y + dy[i];
        
         (a <  || a > n || b <  || b > n) ;
        
         (!st[a][b]) {
            (a, b, num + );
        }
    }
}

{
    cin >> n >> k >> x >> y;
    (x, y, );
    cout << cnt;
     ;
}
-2
-1
2
1
-2
-1
int
// 统计已访问节点数量
void dfs(int x, int y, int num)
true
if
return
// 步数用完,回溯
for
int
0
8
int
// 边界检查
if
1
1
continue
// 未访问过才继续搜索
if
dfs
1
int main()
dfs
0
return
0

在实际运行中,注意递归深度不会超过 k(最大 100),因此栈溢出风险极低。对于更大的数据规模,可能需要考虑 BFS 或记忆化搜索来优化性能。

目录

  1. 题目背景
  2. 题目描述
  3. 输入格式
  4. 输出格式
  5. 样例说明
  6. 子任务约束
  7. 解题思路
  8. 代码实现
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • GitHub 版本控制实战:从零开始掌握核心技巧
  • Python 模块详解:利用 pdf2docx 将 PDF 转换为 Docx
  • 带头双向循环链表的 C 语言实现详解
  • 全球首个网页 MCP 发布 —— 亮数据 Bright Data AI+MCP 服务智能体教程
  • 递归算法核心原理与 LeetCode 实战解析
  • MVP 到千万级并发:AI 在前后端开发中的差异化落地指南
  • 全球 10 大顶尖大模型团队人才分析:167 位华人入选
  • 基于 Python 和 LLM 的本地 RAG 系统构建指南
  • OpenClaw 多 Agent 与多飞书机器人配置指南
  • Android 动态加载技术:原理、场景与实现思路
  • DeepSeek 深度使用指南:提示词工程与本地知识库搭建
  • SiameseAOE 中文-base 模型 ABSA 结果转为 Neo4j 知识图谱
  • 微信小程序 AR 开发:5 步实现增强现实应用
  • 前端数据可视化工具对比与选型指南
  • 基于 Spring Cloud Alibaba 与 Nacos 的微服务负载均衡实践
  • GitHub Copilot 在 VS Code 中的深度使用指南:配置与实战
  • Z-Image-Turbo AI 绘画工具使用指南
  • 双指针算法实战:移动零与复写零详解
  • ToDesk、顺网云与海马云部署 DeepSeek 性能横向评测
  • JavaScript Headers 对象特性与 Request 使用指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online