题目给出一个机器人在某个迷宫中走的路线,问这个路线是否可能是起点到终点的最短路径
如果某路径是迷宫的最短路径
1,经过的位置最多只出现一次 (bfs求最短路的标记的原因)
2,刚走到某个位置时,这个位置只能由刚经过的位置到达(如果这个位置旁边的某位置早已经到达过,那么如果之前从那个位置走到这个位置,最终的路径肯定会更短)
然后分情况讨论即可
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
int gra[105*2][105*2];
struct node
{
int a,b;
}x[4]={{0,1},{0,-1},{1,0},{-1,0}};
map<char,int> vis;
bool judge(int a,int b)//判断是否有重复
{
int cnt=0;
for(int i=0;i<4;++i)
{
int tx=a+x[i].a,ty=b+x[i].b;
if(gra[tx][ty])//旁边走过的路只能有一个
{
++cnt;
if(cnt>1)
{
return 1;
}
}
}
return 0;
}
bool slove(char s[])
{
int sx=105,sy=105,len=strlen(s);
gra[sx][sy]=1;
for(int i=0;i<len;++i)
{
int tp=vis[s[i]];
sx+=x[tp].a;sy+=x[tp].b;
if(gra[sx][sy]||judge(sx,sy))
{
return 0;
}
gra[sx][sy]=1;
}
return 1;
}
int main()
{
vis['L']=0;vis['R']=1;
vis['U']=2;vis['D']=3;
char s[105]={0};
scanf("%s",s);
printf("%s\n",slove(s)?"OK":"BUG");
return 0;
}