c++马走日代码
时间: 2023-07-09 19:21:27 浏览: 69
以下是一个简单的C++程序,实现了马走日的移动方式:
```c++
#include <iostream>
using namespace std;
// 定义棋盘大小
const int N = 8;
// 定义马走日的路径
const int dx[8] = {1, 2, 2, 1, -1, -2, -2, -1};
const int dy[8] = {2, 1, -1, -2, -2, -1, 1, 2};
// 定义棋盘和访问数组
int a[N][N];
bool vis[N][N];
// 判断是否越界
bool check(int x, int y) {
return x >= 0 && x < N && y >= 0 && y < N;
}
// DFS搜索
void dfs(int x, int y, int step) {
// 记录当前位置已访问
vis[x][y] = true;
// 标记当前步数
a[x][y] = step;
// 如果已经走满N*N步,输出结果并结束程序
if (step == N*N) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << a[i][j] << "\t";
}
cout << endl;
}
exit(0);
}
// 向八个方向搜索
for (int i = 0; i < 8; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (check(nx, ny) && !vis[nx][ny]) {
dfs(nx, ny, step + 1);
}
}
// 回溯,将当前位置标记为未访问
a[x][y] = 0;
vis[x][y] = false;
}
int main() {
// 初始化棋盘和访问数组
memset(a, 0, sizeof(a));
memset(vis, false, sizeof(vis));
// 从(0, 0)开始搜索
dfs(0, 0, 1);
return 0;
}
```
这个程序使用DFS算法,从(0, 0)位置开始搜索,依次向八个方向搜索下一步的位置,直到走满N*N步为止。在搜索过程中,使用vis数组记录已经访问过的位置,使用a数组记录每一步所在的位置,并在走满N*N步后输出结果。