标准注释版

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

// 全局变量定义
int a[100][3];          // 存储跳跃路径:a[跳跃步数][0]未使用,a[][1]=x坐标,a[][2]=y坐标
int t = 0;              // 记录成功到达终点的路径总数
// 马跳跃的四种规则(马走日):方向数组 
int x[4] = {2, 1, -1, -2};  // x方向移动:向右2格,向右1格,向左1格,向左2格
int y[4] = {1, 2, 2, 1};    // y方向移动:向上1格,向上2格,向上2格,向上1格

// 函数声明
int search(int step);   // 搜索函数:寻找下一步跳跃位置
int print(int step);    // 打印函数:输出成功到达终点的路径

int main()              // 主程序
{
    // 设置起点位置(0,0)
    a[1][1] = 0;        // 第一步的x坐标
    a[1][2] = 0;        // 第一步的y坐标
    
    // 从第二步开始搜索可能的跳跃路径
    search(2); 
    
    return 0;
}

// 搜索函数:递归寻找马跳跃的路径
// 参数step:当前是第几步跳跃
int search(int step)
{
    // 尝试四个可能的跳跃方向
    for (int j = 0; j <= 3; j++)
    {
        // 计算跳跃后的新位置
        int new_x = a[step-1][1] + x[j];  // 新位置的x坐标
        int new_y = a[step-1][2] + y[j];  // 新位置的y坐标
        
        // 检查新位置是否在棋盘范围内(x:0-4, y:0-8)
        if (new_x >= 0 && new_x <= 4 && new_y >= 0 && new_y <= 8)
        {
            // 保存当前位置到路径中
            a[step][1] = new_x;  // 记录当前步的x坐标
            a[step][2] = new_y;  // 记录当前步的y坐标
            
            // 检查是否到达终点(4,8)
            if (new_x == 4 && new_y == 8)
                print(step);    // 到达终点,打印路径
            else
                search(step + 1); // 未到达终点,继续下一步跳跃
        }
    }
}

// 打印函数:输出成功到达终点的路径
// 参数step:总共用了多少步到达终点
int print(int step)
{
    t++;  // 路径总数加1
    cout << t << ":  ";  // 输出路径编号
    
    // 输出路径中的每一步(除了最后一步)
    for (int i = 1; i <= step - 1; i++)
        cout << a[i][1] << "," << a[i][2] << "-->";
    
    // 输出终点位置
    cout << "4,8" << endl;
}

0 条评论

目前还没有评论...