题解
【入门】跳马问题
1 条题解
-
0
#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