标签:
| 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