Geeksun 2017.12.19
#include <stdio.h
int a[51][51],book[51][51],p,q,m,n,min = 999999999;
//创建时横纵坐标多一个,因为要考虑到用户习惯,一般坐标从1开始,而不是0。
void dfs(int x,int y,int step);
int main()
{
int i,j,startx,starty;
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",&startx,&starty,&p,&q);//请输入起点 终点
book[startx][starty] = 1;
dfs(startx,starty,0);
printf("%d",min);
return 0;
}
void dfs(int x,int y,int step)
{
int tx,ty,i,next[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};//下一步x与y的坐标变化
if(x == p&&y == q)
{
if(step < min)
{
min = step;
}
return;
}
for(i = 0; i < 4; i++)
{
tx = x + next[i][0];//在此处切不可直接将下一步的坐标值赋给x,y
ty = y + next[i][1];//因为如果continue执行的话,x,y的坐标早已改变。
if(tx < 1||ty < 1||tx > n || ty > m)
{
continue;
}
if(a[tx][ty] == 0&&book[tx][ty]==0)//1表示障碍物 0表示此点可以通行
{
book[tx][ty] = 1;
dfs(tx,ty,step + 1);
book[tx][ty] = 0;
}
}
}
DFS走迷宫
最新推荐文章于 2024-01-17 22:57:56 发布