top1编程
← 返回题目
题解

【入门】跳马问题

1 条题解

  • 0
    @ 2026-7-28 22:10:19
    #include <bits/stdc++.h>
    using namespace std;
    int fx[10] = {0,-2, -2, -1, -1, 1, 1, 2, 2};
    int fy[10] = {0,-1, 1, -2, 2, -2, 2, -1, 1};
    int a[10][10] = {0};// 棋盘数组,a[x][y]记录马到达位置(x,y)的步数(0表示未访问)
    int s = 0;// 方案计数器,统计所有可能的遍历路径数目
    // x,y为当前位置坐标,k为当前步数
    void f(int x, int y, int k) {
        a[x][y] = k; // 标记当前位置为第k步
        if (k == 25) {// 当遍历完25个格子时
            s++;  //方案数加1
        } else {
            // 尝试8个可能的移动方向
            for (int i = 1; i <=8; i++) {
                int tx = x + fx[i];// 计算下一个位置的x坐标
                int ty = y + fy[i];// 计算下一个位置的y坐标
                //判断下一个位置是否在棋盘内且未被访问过
                if (tx >=1 && tx <=5 && ty >=1 && ty <=5 && a[tx][ty]==0) {
                    f(tx, ty, k + 1);  // 递归搜索下一步
                }
            }
        }
        a[x][y] = 0;  // 回溯
    }
    int main() {
        f(1, 1, 1);// 从位置(1,1)开始搜索,初始步数为1
        cout << s << endl;  
        return 0;
    }
    
    • 1