#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct point
{
bool f[4];
char s[10000];
int pos,x,y,step;
}a[10][10];
int sx,sy,ex,ey,step[10][10],xx[4]={0,0,1,-1},yy[4]={1,-1,0,0};
char ss[10000],w[4]={'E','W','S','N'};
void bfs()
{
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
step[i][j]=10000;
queue<point>Q;
step[sx][sy]=0;
Q.push(a[sx][sy]);
while(!Q.empty())
{
point now=Q.front();
Q.pop();
for(int i=0;i<4;i++)
{
int x1=now.x+xx[i],y1=now.y+yy[i];
if(x1<=6&&x1>=1&&y1<=6&&y1>=1&&!now.f[i]&&now.step+1<step[x1][y1])
{
point nex=a[x1][y1];
nex.step=now.step+1;
strcpy(nex.s,now.s);
nex.s[now.pos]=w[i];
nex.pos=now.pos+1;
step[x1][y1]=nex.step;
Q.push(nex);
if(x1==ex&&y1==ey)
{
memset(ss,0,sizeof(ss));
strcpy(ss,nex.s);
}
}
}
}
}
int main()
{
while(scanf("%d%d%d%d",&sy,&sx,&ey,&ex)&&(sx+sy))
{
memset(a,0,sizeof(a));
int aa,bb,cc,dd;
for(int i=0;i<=7;i++)
for(int j=0;j<=7;j++)
{
a[i][j].x=i;
a[i][j].y=j;
}
for(int i=0;i<3;i++)
{
scanf("%d%d%d%d",&aa,&bb,&cc,&dd);
if(bb==dd) //same i
for(int j=aa+1;j<=cc;j++)
{
a[bb][j].f[2]=true;
a[bb+1][j].f[3]=true;
}
if(aa==cc)
for(int j=bb+1;j<=dd;j++)
{
a[j][aa].f[0]=true;
a[j][aa+1].f[1]=true;
}
}
bfs();
printf("%s\n",ss);
}
return 0;
}
poj 2935 bfs
最新推荐文章于 2021-05-22 18:10:28 发布