#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <list>
#include <string>
#include <map>
#include <algorithm>
#include <queue>
using namespace std;
struct pos
{
int x,y;
int total;
}p;
int main()
{
int T;
while (1)
{
queue<pos> q;
int A[100][100];
bool record[100][100]={{false}};
scanf("%d",&T);
if (T==0)
break;
int i,j;
for (i=0;i<=T-1;i++)
for (j=0;j<=T-1;j++)
scanf("%d",&A[i][j]);
p.x=p.y=0;
p.total=1;
q.push(p);
while (!q.empty() && (q.front().x!=T-1 || q.front().y!=T-1))
{
if (A[q.front().x][q.front().y+1]!=1 && q.front().y+1<=T-1 )
{
p.x=q.front().x;
p.y=q.front().y+1;
p.total=q.front().total+1;
if (!record[p.x][p.y])
{
q.push(p);
record[p.x][p.y]=true;
}
}
if (A[q.front().x+1][q.front().y]!=1 && q.front().x+1<=T-1)
{
p.x=q.front().x+1;
p.y=q.front().y;
p.total=q.front().total+1;
if (!record[p.x][p.y])
{
q.push(p);
record[p.x][p.y]=true;
}
}
if (A[q.front().x][q.front().y-1]!=1 && q.front().y-1>=0)
{
p.x=q.front().x;
p.y=q.front().y-1;
p.total=q.front().total+1;
if (!record[p.x][p.y])
{
q.push(p);
record[p.x][p.y]=true;
}
}
if (A[q.front().x-1][q.front().y]!=1 && q.front().x-1>=0)
{
p.x=q.front().x-1;
p.y=q.front().y;
p.total=q.front().total+1;
if (!record[p.x][p.y])
{
q.push(p);
record[p.x][p.y]=true;
}
}
q.pop();
}
if (q.empty())
printf("0\n");
else
printf("%d\n",q.front().total);
}
return 0;
}
广搜走迷宫最短路径
最新推荐文章于 2023-11-06 23:37:40 发布