(宽搜) 找BUG

题目描述 :

       有一个机器人,可以自己绕过障碍物并且以最短的路径到达指定终点。
现在的问题是不知道机器人有没有出现bug,即走的路径不是最短的路径。
现在给出机器人的行走路线,L表示向左移动,R表示向右移动,U表示向上移动,D表示向下移动
问你机器人有没有出现bug。
如果有出现bug则输出一行
BUG
否则输出
OK

********两个相邻的格子之间没有障碍物,障碍物只会在格子中出现********

输入描述 :

  输入数据只有一行即机器人的行走路线,保证字符串长度不超过100

输出描述 :

 

  输出也只有一行,机器人有BUG就输出:     BUG

   否则,输出:   OK

 

Input

LLUUUR

Output

OK

Input

RRUULLDD

Output

BUG

题解 :

      把点放入二维数组中,按字符串走出机器人所走路径,然后进行宽搜,记录到达终点的最小步数,进行比较!!

​
#include
#include
#include
#include
using namespace std;

struct fun{
int x,y,ss;
}ff;

int a[210][210]={0};
int v[210][210]={0};
int dfs(int x,int y,int px,int py){
   queueqq;
   v[x][y]=1;
   ff.x=x;
   ff.y=y;
   ff.ss=0;
   qq.push(ff);
   while(!qq.empty()){
    fun g=qq.front();
    qq.pop();
    if(g.x==px&&g.y==py){
    return g.ss;
 }
 int dx,dy;
for(int i=0;i<4;i++){
if(i==0){
dx=g.x+1;
dy=g.y;
}
if(i==1){
dx=g.x-1;
dy=g.y;
}
if(i==2){
dx=g.x;
dy=g.y+1;
}
if(i==3){
dx=g.x;
dy=g.y-1;
}
if(dx>=0&&dx<=200&&dy>=0&&dy<=200&&!v[dx][dy]&&a[dx][dy]==1){
fun h;
h.x=dx;
h.y=dy;
h.ss=g.ss+1;
qq.push(h);
v[dx][dy]=1;
} 
}
   } 
}
int main(){
char s[105];
    scanf("%s",&s);
    a[100][100]=1;
    int px=100,py=100;
    int ss=0;
    for(int i=0;i

 

你可能感兴趣的:((宽搜) 找BUG)