//poj 1101
//sep9
#include <iostream>
using namespace std;
int w,h;
char g[128][128];
int d[128][128];
struct Node
{
int x,y,v;
}q[128*128];
int ex,ey,tx,ty;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
void solve()
{
memset(d,-1,sizeof(d));
d[ex][ey]=0;
int l=0,r=0;
q[r].x=ex,q[r].y=ey,q[r].v=0,r++;
while(l<r){
int x=q[l].x,y=q[l].y,v=q[l].v;
l++;
for(int k=0;k<4;++k){
int nx=x+dx[k];
int ny=y+dy[k];
int nv=v+1;
while(nx>=0&&nx<=h+1&&ny>=0&&ny<=w+1){
if(g[nx][ny]=='X'){
if(d[nx][ny]==-1)
d[nx][ny]=nv;
else
d[nx][ny]=min(d[nx][ny],nv);
break;
}
if(d[nx][ny]==-1||d[nx][ny]>nv){
d[nx][ny]=nv;
q[r].x=nx,q[r].y=ny,q[r].v=nv,r++;
}
nx+=dx[k];
ny+=dy[k];
}
}
}
if(d[tx][ty]==-1)
puts("impossible.");
else
printf("%d segments.\n",d[tx][ty]);
}
int main()
{
int cases=0;
while(scanf("%d%d",&w,&h)==2&&w+h){
printf("Board #%d:\n",++cases);
for(int i=0;i<=h+1;++i)
for(int j=0;j<=w+1;++j)
g[i][j]=' ';
for(int i=0;i<h;++i){
getchar();
for(int j=0;j<w;++j)
scanf("%c",&g[i+1][j+1]);
}
int cnt=0;
while(scanf("%d%d%d%d",&ey,&ex,&ty,&tx)==4&&ex+ey+tx+ty){
printf("Pair %d: ",++cnt);
solve();
}
puts("");
}
return 0;
}
poj 1101 The Game 广搜
最新推荐文章于 2021-03-28 21:24:41 发布