输入m行n列的迷宫矩阵 0代表可以走 1代表围墙不能走 输入起点和终点,输出最短路径。
#include<stdio.h>
int a[51][51],book[51][51];
int ex,ey;//终点坐标
int min=9999;
int m,n;
void dfs(int startx,int starty,int step)
{
int tx,ty,k;
int way[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//走的方式 右下左上
if(startx==ex&&starty==ey)//如果走到终点判断一下 min的值是否有变
{
if(min>step)
min=step;
return ;
}
for(k=0;k<=3;k++)
{
tx=startx+way[k][0]; //tx、ty代表下一步要走的位置
ty=starty+way[k][1];
if(tx<1||ty<1||tx>m||ty>n)//判断是否越界
continue;
if(a[tx][ty]==0&&book[tx][ty]==0)//如果这个点能走 并且没被用过
{
book[tx][ty]=1;//将它定为1 表示用过
dfs(tx,ty,step+1);
book[tx][ty]=0; //将它收回 很重要}
}
return ;
}
int main()
{
int i,j; int st,sy;//定义起点
scanf("%d%d",&m,&n);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
}
scanf("%d%d%d%d",&st,&sy,&ex,&ey);
book[st][sy]=1;//先把起点定为1
dfs(st,sy,0);//从起点开始 步数为0开始
printf("%d",min);
}