C语言写一篇洛谷p1443马的遍历的答案、
时间: 2023-03-26 21:02:31 浏览: 144
马的遍历 C语言求解
马的遍历是一种常见的图形遍历算法,可以用 C 语言来实现。以下是一份示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 25
int n, m, sx, sy, ex, ey, ans;
int dx[8] = {1, 1, 2, 2, -1, -1, -2, -2};
int dy[8] = {2, -2, 1, -1, 2, -2, 1, -1};
int vis[MAXN][MAXN];
void dfs(int x, int y, int step) {
if (x == ex && y == ey) {
ans = step;
return;
}
if (step >= ans) return;
for (int i = ; i < 8; i++) {
int nx = x + dx[i], ny = y + dy[i];
if (nx < 1 || nx > n || ny < 1 || ny > m) continue;
if (vis[nx][ny]) continue;
vis[nx][ny] = 1;
dfs(nx, ny, step + 1);
vis[nx][ny] = ;
}
}
int main() {
scanf("%d%d%d%d%d%d", &n, &m, &sx, &sy, &ex, &ey);
memset(vis, , sizeof(vis));
vis[sx][sy] = 1;
ans = 1e9;
dfs(sx, sy, );
printf("%d\n", ans == 1e9 ? -1 : ans);
return ;
}
这段代码实现了一个深度优先搜索算法,用于求解马在棋盘上从起点到终点的最短路径。其中,dx 和 dy 数组分别表示马可以走的 8 个方向,vis 数组用于记录某个位置是否已经被访问过。在 dfs 函数中,我们首先判断当前位置是否为终点,如果是,则更新答案并返回;否则,我们枚举 8 个方向,对于每个方向,如果下一步的位置合法且未被访问过,则递归搜索下一步。最后,我们输出答案即可。
希望这份代码能够帮助你理解马的遍历算法。
阅读全文