题目:
代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
char mp[31][51]; //稍微开大一点
char k[4]={'D','L','R','U'}; //按字典序记录路径
int dirx[]={1,0,0,-1},diry[]={0,-1,1,0};
int vis[30][50]; //以前用st数组标记
struct node
{
int x,y;
string path;
}; //这里一定要打分号。
//struct node<queue> q; 乌鱼子这个写错了
queue<struct node>q;
void bfs()
{
struct node start;
struct node now;
struct node next;
start.x=0,start.y=0;
start.path="";
vis[0][0]=1;
q.push(start);
/*for(int i=0;i<4;i++)
{
}*/
while(!q.empty())
{
now=q.front();
q.pop();
if(now.x==29&&now.y==49)
{
cout<<now.path; //别忘了return
return;
}
for(int i=0;i<4;i++)
{
next.x=now.x+dirx[i];
next.y=now.y+diry[i];
if(next.x<0||next.x>=30||next.y<0||next.y>=50)
continue;
if(vis[next.x][next.y]==1||mp[next.x][next.y]=='1') //不要忘记屏障这个条件
continue;
vis[next.x][next.y]=1;
next.path=now.path+k[i]; //Path一定要放在push前面
q.push(next);
//path+=k[i];
}
}
}
int main()
{
for(int i=0;i<30;i++)
for (int j=0;j<50;j++)
cin>>mp[i][j];
bfs();
return 0;
}