是一个图论的基础搜索题~
没什么好说的就是搜索就好 主要是别把 代码写的太屎,错了不好找
#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; int sx,sy,ex,ey; struct info { int x,y; char ko; int qian; }; info que[40]; bool flag[10][10]; int n,m; bool vi[10][10][4]; int d[4][2]={-1,0,1,0, 0,-1, 0, 1}; char dd[5]={"WENS"}; void print(int p) { if(p!=0) print(que[p].qian); if(p!=0)printf("%c",que[p].ko); } bool jude(int x,int y) { return x>=1&&y>=1&&x<=6&&y<=6&&flag[x][y]==0; } void solve() { int h=0,r=1; int x,y,x0,y0; que[0].x=sx,que[0].y=sy; flag[sx][sy]=1; while(h!=r) { x=que[h].x; y=que[h].y; h++; for(int i=0;i<4;i++) { if(vi[x][y][i]) { x0=x+d[i][0]; y0=y+d[i][1]; if(jude(x0,y0)) { flag[x0][y0]=1; que[r].x=x0; que[r].y=y0; que[r].qian=h-1; que[r].ko=dd[i]; if(x0==ex&&y0==ey) {print(r);return ;} r++; } } } } } int main() { int a,b,c,d; while(~scanf("%d%d",&sx,&sy)) { if(sx==0&&sy==0) break; memset(vi,1,sizeof(vi)); memset(flag,0,sizeof(flag)); scanf("%d%d",&ex,&ey); for(int i=0;i<3;i++) { scanf("%d%d%d%d",&a,&b,&c,&d); if(a==c) { for(int i=min(b,d)+1;i<=max(b,d);i++) vi[a][i][1]=0,vi[a+1][i][0]=0; } else if(b==d) { for(int i=min(a,c)+1;i<=max(a,c);i++) vi[i][b][3]=0,vi[i][b+1][2]=0; } } solve();printf(" "); } return 0; }