解题思路:
刚开始没想出到怎么记录路径。。。看了下别人的,用个结构体,在结构体中用string记录路径就好。
其他的也没啥可说的。纯bfs,水题
注意事项:
参考代码:
#include <bits/stdc++.h> //[蓝桥杯][算法提高VIP]学霸的迷宫 using namespace std; const int maxn=500; int dire[4][2]={{1,0},{0,-1},{0,1},{-1,0}}; //按照DLRU的顺序进行搜索 char dir[4]={'D','L','R','U'}; int n,m; string map1[maxn]; int vis[maxn][maxn]; struct node{ int x,y; string r; //表示路径 }; void bfs() { queue<node> way; node cur; cur.x=0; cur.y=0; cur.r=""; way.push(cur); vis[cur.x][cur.y]=1; node l,k; while(!way.empty()) { l=way.front(); way.pop(); if(l.x==(n-1) && l.y==(m-1)) break; int tx,ty; for(int i=0;i<4;i++) { tx=l.x+dire[i][0]; ty=l.y+dire[i][1]; if(tx>=0 && tx<n && ty>=0 && ty<m && map1[tx][ty]=='0' && !vis[tx][ty]) //刚开始想着应该不用标记的... //果然超内存... { k.x=tx; k.y=ty; k.r=l.r+dir[i]; way.push(k); vis[tx][ty]=1; } } } cout<<l.r.length()<<"\n"<<l.r; return ; } int main() { scanf("%d %d",&n,&m); getchar(); for(int i=0;i<n;i++) getline(cin,map1[i]); memset(vis,0,sizeof(vis)); bfs(); return 0; }
0.0分
2 人评分