走迷宫,用二维数组存储的一个迷宫;
找起点(1,1)到(p,q)的最短路径
#include <stdio.h>
int n, m, p, q, min = 99999999;
int a[51][51], book[51][51];
void dfs(int x, int y, int step) {
int next[4][2]={{0,1}, //向右走
{1,0}, //向下走
{0,-1}, //向左走
{-1,0}}; //向上走
int tx, ty, k;
if (x == p && y == q) {
//更新最小值 (最短路径),
if (step < min)
min = step;
return;
}
//枚举4种走法
for (k = 0; k < 4; k++) {
//计算下一个点的坐标
tx = x + next[k][0];
ty = y + next[k][1];
//判断是否越界
if (tx<1 || tx>n || ty<1 || ty>m)
continue;
//判断该点是否为障碍物或者已经在路径中,a[][]==0表示无障碍物,book[][]标记是否在路径中
if (a[tx][ty] == 0 && book[tx][ty]==0) {
book[tx][ty] = 1;// 标记这个点已经走过
dfs(tx,ty, step + 1);//开始尝试下一个点
book[tx][ty] = 0; //尝试结束,取消这个点的标记
}
}
return;
}
int main() {
int i, j, startx, starty;
//读入n行,m列;
scanf("%d %d", &n, &m);
//读入迷宫
for (i = 1; i <= n; i++)
for (j = 1; j <= m; j++)
scanf("%d", &a[i][j]);
printf("输入起点坐标,终点坐标:\n");
//读入起点和终点坐标
scanf("%d %d %d %d", &startx, &starty, &p, &q);
book[startx][starty] = 1; //标记起点已经在路径中
dfs(startx, starty, 0);
printf("%d", min);
getchar(); getchar();
return 0;
}