问题描述:
给你一个N*M的迷宫,现已知小明的起始坐标和小刚的坐标,请你求小明到小刚的最短距离,迷宫中1表示障碍物,0表示可以走。
样例输入
5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 1 4 3
样例输出:
7
程序代码:
#include<stdio.h>
int min=99999;
int a[61][61],book[61][61];//在C语言中定义全局变量,如果没有特别说明则默认为0.
int p,q,n,m;//因为终止坐标在函数中也要用到所以要定义为全局变量
void dfs(int x,int y,int step)
{
int i,k,tx,ty;
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
if(x==p&&y==q)//判断此时的坐标是否等于终点的坐标
{
if(step<min)
min=step;//更新最小值
return ;
}
//枚举四种走法
for(k=0;k<3;k++)
{
tx=x+next[k][0];//计算下一个点的坐标
ty=y+next[k][1];
if(tx<1||tx>n||ty<1||ty>m)
continue;
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,stx,sty;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)//打印迷宫
for(j=1;j<=m;j++)
scanf("%d",&a[i][j]);
scanf("%d%d%d%d",&stx,&sty,&p,&q);//输入起始跟终点坐标
dfs(stx,sty,0);//一开始步数为零
printf("%d",min);
return 0;
}