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

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

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

蜜桃汽水发布于 2026/4/10更新于 2026/5/2315 浏览

题目背景

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

题目描述

实验场地被划分为 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, -2, , , , , };
 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;
     ;
}
-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. 代码实现
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • Python Pytest Requests API 接口测试自动化框架
  • VS Code 前端开发高效插件推荐与配置实战
  • 19 类主流 Agent 框架对比调研
  • Intel Stratix 10 Nios V 工程搭建(一)
  • OpenClaw 赋能机器人硬件,AI 代理迈向具身智能新阶段
  • UI UX Pro Max:AI 驱动的现代前端 UI 工作流实战
  • Java 最新版本详细安装配置教程
  • 贪心算法核心思想与 LeetCode 经典例题解析
  • Pi0 机器人大模型在昇腾 A2 上的部署与性能测评
  • faster-whisper 快速部署与性能优化实战
  • 6 款免费学术论文降低 AI 检测率工具实测
  • Python 爬虫实战:抓取 BOSS 直聘与智联招聘岗位信息
  • FPGA实现UART串口通信
  • Qwen3.5-4B 微调实战:基于 LLaMA-Factory 构建医疗 AI 助手
  • Xinference 同平台并发推理实录:Llama3-70B+Qwen2-VL+Whisper
  • 前端国际化最佳实践指南
  • OpenClaw QQ 机器人接入实战指南
  • 使用 Python 搭建本地 AI 问答系统及环境避坑指南
  • C++ 一级等级考试真题解析
  • Python 开发常用库整理汇总

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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