PTA 7-13 电路布线 (20 分)
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
struct node
{
int row;
int col;
};
int main()
{
int m,n,a[100][100],c=0;
node Start,End;
queue<node> Q;
int direction[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
cin>>m>>n;
for(int i=0; i<m+2; i++)
{
a[i][0]=1;
a[i][n+1]=1;
}
for(int j=0; j<n+2; j++)
{
a[0][j]=1;
a[m+1][j]=1;
}
for(int i=1; i<=m; i++)
{
for(int j=1; j<=n; j++)
{
cin>>a[i][j];
}
}
cin>>Start.row>>Start.col;
cin>>End.row>>End.col;
node pre=Start,next;
a[pre.row][pre.col]=2;
while(true)
{
for(int i=0; i<4; i++)
{
next.row=pre.row+direction[i][0];
next.col=pre.col+direction[i][1];
if(a[next.row][next.col]==0)
{
a[next.row][next.col]=a[pre.row][pre.col]+1;
if(next.row==End.row&&next.col==End.col)
{
break;
}
Q.push(next);
}
}
if(next.row==End.row&&next.col==End.col)
{
c=a[End.row][End.col]-1;
break;
}
if(Q.empty())
return 0;
pre=Q.front();
Q.pop();
}
cout<<c<<endl;
return 0;
}