寬搜
#include<cstdio>#include<iostream>#include<cstring>#include<queue>using namespace std;struct Node{int x;int y;};int n,m,sx,sy;char map[20][20];int vis[20][20];int step[20][20];void bfs(){Node start,temp1,temp2;queue<Node> q;start.x=sx;start.y=sy;q.push(start);memset(vis,0,sizeof(vis));memset(step,0,sizeof(step));vis[sx][sy]=1;step[sx][sy]=0;while(!q.empty()){temp1=q.front();q.pop();if(map[temp1.x][temp1.y]=='W'){temp2.y=temp1.y-1;temp2.x=temp1.x;}else{if(map[temp1.x][temp1.y]=='E'){temp2.y=temp1.y+1;temp2.x=temp1.x;}else {if(map[temp1.x][temp1.y]=='S'){temp2.y=temp1.y;temp2.x=temp1.x+1;}else{temp2.y=temp1.y;temp2.x=temp1.x-1;}}}if(temp2.x<0||temp2.x==n||temp2.y<0||temp2.y==m){printf("%d step(s) to exit\n",step[temp1.x][temp1.y]+1);return ;}if(vis[temp2.x][temp2.y]){printf("%d step(s) before a loop of %d step(s)\n",step[temp2.x][temp2.y],step[temp1.x][temp1.y]-step[temp2.x][temp2.y]+1);return;}step[temp2.x][temp2.y]=step[temp1.x][temp1.y]+1;vis[temp2.x][temp2.y]=1;q.push(temp2);}}int main(){int i;while(cin>>n>>m&&n+m){cin>>sy;sy--;sx=0;for(i=0;i<n;i++)cin>>map[i];bfs();}return 0;}