6264:走出迷宫(DFS和BFS)
- 描述
-
当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。
假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路。 - 输入
-
第一行是两个整数n和m(1<=n,m<=100),表示迷宫的行数和列数。
接下来n行,每行一个长为m的字符串,表示整个迷宫的布局。字符'.'表示空地,'#'表示墙,'S'表示起点,'T'表示出口。 - 输出
- 输出从起点到出口最少需要走的步数。
- DFS
-
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #include <algorithm>using namespace std;int n,m,walk[200][200],sx,sy,ex,ey,ans=0x3f3f3f3f; char s[200][200];int row[4]={-1,0,1,0}; int col[4]={0,1,0,-1};void DFS(int x,int y,int sum) {if(x==ex&&y==ey){if(sum<ans)ans=sum;return;}for(int i=0;i<=3;i++){int xx=x+row[i];int yy=y+col[i];if(xx>=0&&xx<m&&yy>=0&&yy<n&&walk[xx][yy]>sum+1&&s[xx][yy]!='#'){walk[xx][yy]=sum+1;DFS(xx,yy,sum+1);}}return; } int main() {cin>>m>>n;memset(walk,0x3f,sizeof(walk));for(int i=0;i<m;i++){for(int j=0;j<n;j++){cin>>s[i][j];if(s[i][j]=='S'){sx=i;sy=j;}if(s[i][j]=='T'){ex=i;ey=j;}}}walk[sx][sy]==0;DFS(sx,sy,0);cout<<ans<<endl;return 0; }
BFS
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <algorithm> #include <queue>using namespace std;const int maxn=100; struct node{int x,y;int step; }S,T,Node;int n,m; char maze[maxn][maxn]; bool inq[maxn][maxn]; int X[4]={0,0,1,-1}; int Y[4]={1,-1,0,0};bool test(int x,int y) {if(x>=n||x<0||y>=m||y<0) return false;if(maze[x][y]=='#'||inq[x][y]==true) return false;return true; }int BFS() {queue<node>q;q.push(S);while(!q.empty()){node top=q.front();q.pop();if(top.x==T.x&&top.y==T.y){return top.step;}for(int i=0;i<4;i++){int newX=top.x+X[i];int newY=top.y+Y[i];if(test(newX,newY)){Node.x=newX;Node.y=newY;Node.step=top.step+1;q.push(Node);inq[newX][newY]=true;}}}return -1; }int main() {scanf("%d%d",&n,&m);for(int i=0;i<n;i++){for(int j=0;j<m;j++){cin>>maze[i][j];}}for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(maze[i][j]=='S'){S.x=i;S.y=j;}if(maze[i][j]=='T'){T.x=i;T.y=j;}}}S.step=0;printf("%d\n",BFS());return 0; }
转载于:https://www.cnblogs.com/Fy1999/p/9011519.html
6264:走出迷宫(DFS和BFS)相关推荐
- 【NOI】6264:走出迷宫/ 2.5基本算法之搜索
6264:走出迷宫 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会 ...
- 信息学奥赛一本通 1254:走出迷宫 | OpenJudge NOI 2.5 6264:走出迷宫
[题目链接] ybt 1254:走出迷宫 OpenJudge NOI 2.5 6264:走出迷宫 [题目考点] 1. 广搜 迷宫问题 [解题思路] 广搜,迷宫问题模板题. 当数据量很小时,用深搜的方法 ...
- 6264:走出迷宫——BFS
描述 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单. 假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路. 输入 第一行 ...
- 6264:走出迷宫 (BFS,板子题)
描述 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单. 假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路. 输入 第一行 ...
- NOI题库2.5 6264 走出迷宫
描述 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单. 假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路. 输入 第一行 ...
- 【NOI】6264 走出迷宫
描述 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单. 假设你已经得到了一个n*m的迷宫的图纸,请你找出从起点到出口的最短路. 输入 第一行 ...
- POJ 6264:走出迷宫
" Ctrl AC!一起 AC!" 题目:忘题戳这 分析:一道典型的寻路广搜模板题,见博主的往日分析 AC代码: #include<iostream> #include ...
- 搜索4--noi6264:走出迷宫
搜索4--noi6264:走出迷宫 一.心得 可以去看看别人的代码,吸收精华 二.题目 6264:走出迷宫 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 当 ...
- 信息学奥赛一本通(1254:走出迷宫)
1254:走出迷宫 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 9105 通过数: 4245 [题目描述] 当你站在一个迷宫里的时候,往往会被错综复杂的 ...
最新文章
- 不是“重复”造轮子,百度飞桨框架2.0如何俘获人心
- 海外博士一般朝九晚五,国内博士动辄十几个小时科研时间。为什么普遍认为海外博士水平比较高?...
- 24-Logistic Regression
- 2021巢湖第一中学高考成绩查询,2021年巢湖高中录取分数线是多少及高中排名榜...
- 中国的EMM市场迎来爆发期?
- ABAP文档生成工具
- XML数据岛(XML Data Island)(只适用于ie)
- 无废话XML--XML约束(DTD)
- python中fd和rt是什么意思_python中fd()是什么
- 手绘流程图讲解spark是如何实现集群的高可用
- oracle库锁表处理,oracle 数据库锁表处理 ORA-00031
- deepin终端下载速度超慢解决方案
- 指定 年-月-日 将其封装tree树状结构
- 简单的树遍历枚举器v0.2-挑战一个程序员到底能多懒- 添加广度优先遍历
- 脑皮质算法(2)一种基于新皮层网格细胞的智能和皮质功能的框架
- consul connect envoy 启动acls和tls后,grpc连接异常
- Java开发自行车管理项目要求_java毕业设计_springboot框架的公共自行车租赁管理...
- 天猫服饰新推“良品臻选”,请了一群挑剔的女人给服装“挑刺”
- VS2008简体中文版下载
- 高中数学一轮复习逆袭必要学习方法