迷宫找路

走出迷宫

https://ac.nowcoder.com/acm/problem/14572

小技巧:用scanf(" %c",&map[i][j])读入字符,这里%c前加了空格可以过滤掉字符前的回车和空格,没有回车空格也不影响。 这里最好用BFS的原因:bfs找到终点直接break就好了,而dfs找到终点依旧得回溯。 坚持用DFS的话要注意的细节:回溯的时候visit[]不清空。 因为这里只是找终点而不是求最短路,走过的路没必要继续走了,因为这条路要是能到终点你就已经找到了路,这条路要是到不了终点也没必要走。 DFS

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int N,M;
char map[1010][1010];
int visit[1010][1010];
bool flag;
int dir[4][2]={{-1,0},{0,-1},{1,0},{0,1}};//上左下右 

void dfs(int x,int y)
{
	if(map[x][y]=='E'){
		flag=true;return;
	}
	for(int i=0;i&lt;4;i++)//各个方向走一遍 
	{
		int xx=x+dir[i][0];
		int yy=y+dir[i][1];
		if(map[xx][yy]!='#' &amp;&amp; !visit[xx][yy] &amp;&amp; xx&gt;=1 &amp;&amp; yy&gt;=1 &amp;&amp; xx&lt;=N &amp;&amp; y&lt;=M)//能走,不出地图,没走过 
		{
			visit[xx][yy]=1;dfs(xx,yy);
		}
	}
	return ;
}

int main()
{
	while(cin&gt;&gt;N&gt;&gt;M)
	{
		memset(map,0,sizeof(map));//清空地图,这个很important
		memset(visit,0,sizeof(visit));//清空标记数组 
		int x=-1,y=-1;//出发点 
		flag=false;
		for(int i=1;i&lt;=N;i++){//构建地图 
			for(int j=1;j&lt;=M;j++){
				scanf(" %c",&amp;map[i][j]);
				if(map[i][j]=='S'){
					x=i;y=j;
				}
			}
		}
		dfs(x,y);
		if(flag)	cout&lt;&lt;"Yes"&lt;<endl; else cout<<"no"<<endl; } return 0; ``` **bfs** #include<iostream>
#include<cstring>
#include<queue>
using namespace std;
char mp[505][505];
int visit[505][505];
bool flag;
int N,M;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
struct Point{
	int x,y;
};

bool bfs(int x,int y)
{
	queue<point> q;
	q.push({x,y});
	while(!q.empty())
	{
		int xa=q.front().x;
		int xb=q.front().y;
		q.pop();
		for(int i=0;i&lt;4;i++)
		{
			int xx=xa+dir[i][0];
			int yy=xb+dir[i][1];
			if(mp[xx][yy]=='E')	return true;
			if(mp[xx][yy]!='#' &amp;&amp; !visit[xx][yy] &amp;&amp; xx&gt;0 &amp;&amp; yy&gt;0 &amp;&amp; xx&lt;=N &amp;&amp;yy&lt;=M)
			{
				visit[xx][yy]=1;
				q.push({xx,yy});
			}
		}
	}
	return false;
}

int main()
{
	while(cin&gt;&gt;N&gt;&gt;M)
	{
		int x,y;
		flag=false;
		memset(mp,0,sizeof(mp));
		memset(visit,0,sizeof(visit));
		for(int i=1;i&lt;=N;i++)
		{
			for(int j=1;j&lt;=M;j++)
			{
				scanf(" %c",&amp;mp[i][j]);
				if(mp[i][j]=='S'){
					x=i;y=j;
				}
			}
		}
		flag=bfs(x,y);
		if(flag)	cout&lt;&lt;"Yes"&lt;</point></queue></cstring></endl;></cstring></cstdio></iostream>
全部评论

相关推荐

03-11 23:33
已编辑
曲阜师范大学 后端工程师
牛客68808588...:果真开发过12306购票系统吗,这不是一眼就被看穿了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
4471次浏览 48人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16917次浏览 137人参与
# 米连集团26产品管培生项目 #
7384次浏览 226人参与
# 沪漂/北漂你觉得哪个更苦? #
1616次浏览 41人参与
# 你的实习产出是真实的还是包装的? #
3230次浏览 54人参与
# 春招至今,你的战绩如何? #
16140次浏览 146人参与
# MiniMax求职进展汇总 #
25260次浏览 322人参与
# HR最不可信的一句话是__ #
1107次浏览 32人参与
# AI面会问哪些问题? #
971次浏览 24人参与
# 你做过最难的笔试是哪家公司 #
1306次浏览 23人参与
# AI时代,哪个岗位还有“活路” #
2930次浏览 53人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152945次浏览 889人参与
# 简历第一个项目做什么 #
32180次浏览 363人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8029次浏览 43人参与
# XX请雇我工作 #
51164次浏览 171人参与
# 简历中的项目经历要怎么写? #
311119次浏览 4271人参与
# 投格力的你,拿到offer了吗? #
178382次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
77008次浏览 375人参与
# AI时代,哪些岗位最容易被淘汰 #
64819次浏览 891人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187635次浏览 1123人参与
# 你怎么看待AI面试 #
180882次浏览 1318人参与
# 正在春招的你,也参与了去年秋招吗? #
364407次浏览 2642人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务