题意:
从矩阵上的一个地方走到另一个地方,0表示路通,1表示走不通,求最少步数。
思路:
用广搜,深搜也可以。
代码:
#include<cstdio>
int n,a[1100][1100],state[1111000][3],x,y,px,py,best;
short dx[5]={0,1,0,-1,0},dy[5]={0,0,1,0,-1};
char c;
bool check(int x,int y)
{
if (1>x||x>n||1>y||y>n||a[x][y]==1) return false;
return true;
}
void bfs()
{
int tail,head;
state[1][1]=x;state[1][2]=y;state[1][3]=0;tail=1;head=0;
do
{
head++;
for (int i=1;i<=4;i++)
{
if(check(state[head][1]+dx[i],state[head][2]+dy[i]))
{
tail++;
state[tail][1]=state[head][1]+dx[i];
state[tail][2]=state[head][2]+dy[i];
state[tail][3]=state[head][3]+1;//state[][1]记录横坐标,state[][2]记录纵坐标,state[][3]记录步数
a[state[tail][1]][state[tail][2]]=1;
if (state[tail][1]==px&&state[tail][2]==py)
{
best=tail;
return;
}
}
}
}
while (head<tail);
}
int main()
{
scanf("%d",&n);c=getchar();
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
c=getchar();
a[i][j]=c-48;
}
c=getchar();
}
scanf("%d%d%d%d",&x,&y,&px,&py);//分别代表起点坐标和终点坐标
bfs();
printf("%d",state[best][3]);
}