解题思路:
    刚开始没想出到怎么记录路径。。。看了下别人的,用个结构体,在结构体中用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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论