下午看了一个DFS的视频,学会了迷宫的解决方法,下面给大家详细的说明一下:
代码内有详细的注释,编程小白也能看明白:
#include <stdio.h>
int n, m, t, i;
int count = 0;
int SX, SY;
int FX, FY;
int a[50][50]; //0表示未访问,1表示访问, 2表示障碍
// 表示可以移动的4个方向
int xx[4] = {0, 1, 0, -1};
int yy[4] = {1, 0, -1, 0};
int dfs(int x, int y) {
// 起点 == 终点, 说明找到一条路线
if(x == FX, y == FY) {
count++;
return;
} else {
for(i = 0; i < 4; i++) {
// 向四个方向移动
int tx = x + xx[i];
int ty = y + yy[i];
// 不能越界, 访问过的不能访问, 障碍不能访问
if(tx > n || ty > m || tx < 1 || ty < 1 || a[tx][ty] == 1 || a[tx][ty] == 2) {
continue;
} else {
a[tx][ty] = 1; // 移动后设置访问过
dfs(tx, ty);
a[tx][ty] = 0; // 回溯, 将访问的坐标改为未访问, 防止下次无法访问
}
}
}
}
main() {
scanf("%d%d%d", &n, &m, &t); //输入 行 列 障碍
scanf("%d%d", &SX, &SY); // 起点
scanf("%d%d", &FX, &FY); // 终点
// 设置障碍的坐标
while(t--) {
int t_x, t_y;
scanf("%d%d", &t_x, &t_y);
a[t_x][t_y] = 2;
}
a[SX][SY] = 1; // 将开始坐标设置已访问
dfs(SX, SY); // 传入开始的坐标
printf("%d", count);
return 0;
}