#include
#include
const int MAX=1005;
using namespace std;
char map[MAX][MAX];
typedef struct s
{
int x,y;
int step;
s(int a=0): step(a){};
const bool operator < (const struct s &s1 ) const
{
return step>s1.step;
}
}S;
int visited[MAX][MAX];
int n,m;
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int bfs(int sx,int sy,int ex,int ey)
{
priority_queue Q;
S pre,cur;
pre.x=sx;
pre.y=sy;
pre.step=0;
Q.push(pre);
visited[pre.x][pre.y]=1;
while(!Q.empty())
{
pre=Q.top();
Q.pop();
cur=pre;
for(int i=0;i<4;i++)
{
cur.x=pre.x+dir[i][0];
cur.y=pre.y+dir[i][1];
cur.step=pre.step;
if(cur.x>=1&& cur.x<=m && cur.y>=1 && cur.y<=n
&& visited[cur.x][cur.y]==0)
{
if(map[cur.x][cur.y]=='.')
cur.step=pre.step+1;
if(cur.x==ex && cur.y==ey)
return cur.step;
Q.push(cur);
visited[cur.x][cur.y]=1;
}
}
}
return -1;
}
void init()
{
memset(visited,0,sizeof(visited));//注意初始化
}
int main(void)
{
while(scanf("%d%d",&m,&n),n||m)//这里用cin果断超过1000ms,用scanf512ms飘过~还有,注意m是row,n是col
{
init();
int sx,sy,ex,ey;
for(int i=1;i<=m;i++)
scanf("%s",map[i]+1);
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
int ans=bfs(sx,sy,ex,ey);
printf("%d\n",ans);
}
return 0;
}
相关文章: