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

CCF-CSP 认证:机器人复健指南题解

解析 CCF-CSP 认证中机器人移动问题。题目要求在 n×n 网格内,从起点出发,每次可向八个方向跳跃(类似马步),限制最大步数 k。需计算 k 步内可达的方格总数。解决方案采用深度优先搜索(DFS)或广度优先搜索(BFS)。文中提供了基于 DFS 的 C++ 实现代码,包含边界判断与访问标记逻辑,确保统计所有经过位置。

时间旅人发布于 2026/4/6更新于 2026/9/975 浏览

题目背景

西西艾弗岛某山脉深处出土了一台远古机器人,具体年代已不可考。初步修缮后,研究人员尝试操控机器人进行些简单的移动。

题目描述

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

文章配图

若机器人只能跳动不超过 k 步,场地内有多少方格(包括起始位置)可以抵达?

输入格式

从标准输入读入数据。

输入的第一行包含空格分隔的两个正整数 n 和 k,分别表示场地大小和跳动步数。

输入的第二行包含空格分隔的两个正整数 x 和 y,表示机器人的起始位置(保证位于场地内)。

输出格式

输出到标准输出。

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

样例 1 输入

4 1 1 1 

样例 1 输出

3 

样例 2 输入

4 2 1 1 

样例 2 输出

8 

样例 2 解释

如下图所示,初始位置、第一步和第二步跳跃抵达的位置总计为 8。

文章配图

子任务

80% 的测试数据满足:k≤3;

全部的测试数据满足:n、k 均大于 0 且不超过 100。

题解

可以使用 BFS 或 DFS 进行搜索。在 DFS 实现中,步数作为递归函数的参数传递;而在 BFS 实现中,步数需要作为队列元素的附加参数存储。

实现细节

dx 和 dy 数组分别表示移动方向,st 数组用于记录访问状态,全局变量 cnt 统计已访问节点的数量。需要特别处理边界判断,同时统计的节点数包括所有经过的位置,而不仅仅是终点。

代码

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int n, k, x, y;
int a[N][N];
bool st[N][N];
int dx[8] = {1, 2, 1, 2, -1, -2, -1, -2};
int dy[8] = {2, 1, -2, -1, 2, 1, -2, -1};
int cnt;

void dfs(int x, int y, int num) {
    st[x][y] = true;
    cnt++;
    if (num == k) return;
    for (int i = 0; i < 8; i++) {
        int nx = x + dx[i];
        int ny = y + dy[i];
        if (nx < 1 || nx > n || ny < 1 || ny > n) continue;
        if (!st[nx][ny]) {
            dfs(nx, ny, num + 1);
        }
    }
}

int main() {
    cin >> n >> k >> x >> y;
    dfs(x, y, 0);
    cout << cnt;
}

目录

  1. 题目背景
  2. 题目描述
  3. 输入格式
  4. 输出格式
  5. 样例 1 输入
  6. 样例 1 输出
  7. 样例 2 输入
  8. 样例 2 输出
  9. 样例 2 解释
  10. 子任务
  11. 题解
  12. 实现细节
  13. 代码

更多推荐文章

查看全部
  • C++ 类与对象进阶:默认成员函数与操作符重载
  • 南北阁 4.1-3B WebUI 效果展示:输入框语法高亮与 JSON/YAML 格式校验
  • 图神经网络(GNN)研究综述
  • 从 vw/vh 到 clamp():前端响应式设计的痛点与进化
  • Java 8 函数式编程实战:Lambda、Stream 与 Optional 详解
  • VS Code + GitHub Copilot 避坑指南:从安装配置到最佳实践
  • Docker Compose 多实例 Tomcat 部署示例
  • 数据结构与算法:随机链表复制的三步解法
  • 五种主流 AI Agent 框架对比与选型指南
  • OpenClaw iOS/Android 端部署教程:语音唤醒与随身 AI 助手
  • 多语言获取股票数据接口示例:Python JavaScript Java
  • Photoshop 集成 ComfyUI 与 Stable Diffusion 实战指南
  • 基于 Rokid 灵珠 AI 平台的春节全能助手智能体开发实践
  • llama.cpp 部署 Qwen3-14B-Claude-4.5-Opus-High-Reasoning-Distill 模型
  • C/C++ 动态规划入门:多状态 DP 实战(打家劫舍与股票买卖)
  • Java 垃圾回收机制详解
  • Windows 系统 Python 升级及版本管理方法
  • 基于 Vue 和 SpringBoot 的疫苗接种管理系统设计与实现
  • C++ 虚函数表实现机制详解
  • Conda 虚拟环境创建、多 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