标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 12845 | Accepted: 6234 |
Description
Input
Output
Sample Input
3 6 5 NEESWE WWWESS SNWWWW 4 5 1 SESWE EESNW NWEEN EWSEN 0 0 0
Sample Output
10 step(s) to exit 3 step(s) before a loop of 8 step(s)
Source
原题链接:http://poj.org/problem?id=1573
题意:有一个N*M的区域,机器人从第一行的第几列进入,该区域全部由‘N‘ , ‘S‘ , ‘W‘ , ‘E‘ ,走到某个区域的时候只能按照该区域指定的方向进行下一步,问你机器人能否走出该片区域,若不能,输入开始绕圈的步数和圈的大小。
DFS还是BFS对于这题有影响吗?
对,有,BFS 0ms!!DFS 16 ms!!!
搜索我是渣渣,看两份到吗的数据,POJ。
#include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; struct node { int x,y; node(int x=0,int y=0):x(x),y(y) {}; //装X的写法 }; char a[15][15]; bool vis[15][15]; int step[15][15]; int n,m,s; void BFS() { queue<node>q; memset(vis,false,sizeof(vis)); step[0][s-1]=0; q.push(node(0,s-1)); int stepp=-1; while(!q.empty()) { node now=q.front(); q.pop(); stepp++; if(now.x<0||now.x>=n||now.y<0||now.y>=m) { printf("%d step(s) to exit\n",stepp); return ; } if(vis[now.x][now.y]) { printf("%d step(s) before a loop of %d step(s)\n",step[now.x][now.y],stepp-step[now.x][now.y]); return ; } vis[now.x][now.y]=true; step[now.x][now.y]=stepp; if(a[now.x][now.y]=='S') { q.push(node(now.x+1,now.y)); } else if(a[now.x][now.y]=='N') { q.push(node(now.x-1,now.y)); } else if(a[now.x][now.y]=='W') { q.push(node(now.x,now.y-1)); } else if(a[now.x][now.y]=='E') { q.push(node(now.x,now.y+1)); } } } int main() { while(cin>>n>>m>>s,n,m,s) { for(int i=0; i<n; i++) cin>>a[i]; BFS(); } return 0; } /** 3 3 1 SWW SSN EEN */
#include <iostream> #include <cstdio> #include <cstring> using namespace std; char a[15][15]; bool vis[15][15]; int step[15][15]; int n,m,s,stepp; void DFS(int x,int y,int t) { stepp++; if(x<0||x>=n||y<0||y>=m) { printf("%d step(s) to exit\n",stepp); return ; } if(vis[x][y]) { printf("%d step(s) before a loop of %d step(s)\n",step[x][y],stepp-step[x][y]); return ; } vis[x][y]=true; step[x][y]=stepp; int xx,yy; if(a[x][y]=='S') { //x+=1; xx=x+1; yy=y; } else if(a[x][y]=='N') { //x-=1 xx=x-1; yy=y; } else if(a[x][y]=='W') { //y-=1; xx=x; yy=y-1; } else if(a[x][y]=='E') { //y+=1; xx=x; yy=y+1; } DFS(xx,yy,stepp+1); } int main() { while(cin>>n>>m>>s,n,m,s) { for(int i=0; i<n; i++) cin>>a[i]; stepp=-1; memset(vis,false,sizeof(vis)); DFS(0,s-1,0); } return 0; }
POJ 1573 Robot Motion【是搜索,就不要纠结是DFS还是BFS】
标签:
原文地址:http://blog.csdn.net/hurmishine/article/details/52150066