题目:东东找妹纸。

东东手里有一张神奇的地图,通过地图可以找到妹子!地图显示,0表示可以走,1表示不可以走,左上角是入口,右下角是妹纸,这两个位置保证为0。既然已经知道了地图,那么东东找到妹纸就不难了,请你编一个程序,写出东东找到妹纸的最短路线。

输入输出要求及样例见下图:

思路:

这是一个需要求解最短路径的问题,考虑使用广度优先搜索配合队列,广度优先搜索是一层一层进行搜索的,一步能到达的点这个方法就不会让你走两步到达(因为在第一层搜索的时候已经把点加入队列了)。由于结果是要求整个路径而不是最小距离,因此在进行bfs时需要记录每一点的上一个位置。

流程如下:

首先将起点加入队列中;

开始循环依次处理队列中的每一个点,处理方法为找到该点相邻的且未被标记的点(用vis数组记录标记信息)加入队列,在处理相邻点的时候使用偏移量dx、dy,由于题目要求路径,因此在讲每个点加入队列的同时记录前一个点在road数组中;

直到终点被标记,整个广度优先搜索过程结束;

因为找到路径时是从终点向起点回溯的,因此找寻出来的路径正常来讲是反序的。这个正序输出的方法相当暴力,没有采取递归的方法。而是从终点开始,找到终点的前一个点a,然后再找点a的前一个点,循环该过程,直至回到起点。在此过程中,将点信息反序保存在了一位数组output中,然后再正序输出,就输出了寻找妹纸的路径。

代码:

#include <iostream>
#include <cstring>
#include <queue>
using namespace std;int maze[5][5];//迷宫
int dis[5][5];//距离
pair<int,int> road[5][5];//路径
bool vis[5][5];
pair<int,int> output[25];queue<pair<int,int> >  q;const int dx[4] = {0,0,-1,1};//上下左右
const int dy[4] = {1,-1,0,0};//上下左右void bfs()
{memset(vis,false,sizeof vis);memset(dis, 63, sizeof dis);memset(output, 0, sizeof output);pair<int,int> p1(0,0);q.push(p1);vis[0][0] = true;dis[0][0] = 0; road[0][0] = p1;while(!q.empty()){//bool is = false;pair<int,int> p = q.front();q.pop();for(int i=0 ;i<4 ;i++){int x = p.first + dx[i];int y = p.second + dy[i];if(x>=0 && x<5 && y>=0 && y<5 && maze[x][y]==0 && vis[x][y]==false){pair<int ,int> p2(x,y);q.push(p2);dis[x][y] = dis[p.first][p.second] + 1;vis[x][y] = true;pair<int ,int> p3(p.first,p.second);road[x][y] = p3;if(x==4 && y==5) break;  }}}int a =4 ,b = 4;int count = 24;while(a!=0 || b!=0)//把路径弄到数组output里 {int u = road[a][b].first;int v = road[a][b].second;pair<int ,int> p4(u,v);output[count--] = p4;a = u;b = v;}cout<<"(0, 0)"<<endl;for(int i=0 ;i<25 ;i++){if(output[i].first==0 && output[i].second==0)continue;cout<<"("<<output[i].first<<", "<<output[i].second<<")"<<endl;}cout<<"(4, 4)"<<endl;
}int main()
{for(int i=0 ;i<5 ;i++)for(int j=0 ;j<5 ;j++)cin>>maze[i][j];bfs();
}

bfs之走地图(迷宫)相关推荐

  1. BFS:走出迷宫并输出最小步数

    目录 背景 描述 例子 思路 完整代码 收获总结 背景 描述 给定一个n*m大小的迷宫,其中*代表不可通过的墙壁,而"."代表墙壁,S表示起点,T代表重点.移动过程中,如果当前位置 ...

  2. 搜索4--noi6264:走出迷宫

    搜索4--noi6264:走出迷宫 一.心得 可以去看看别人的代码,吸收精华 二.题目 6264:走出迷宫 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 当 ...

  3. 信息学奥赛一本通(1254:走出迷宫)

    1254:走出迷宫 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 9105     通过数: 4245 [题目描述] 当你站在一个迷宫里的时候,往往会被错综复杂的 ...

  4. 【NOI】6264:走出迷宫/ 2.5基本算法之搜索

    6264:走出迷宫 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会 ...

  5. 信息学奥赛一本通 1254:走出迷宫 | OpenJudge NOI 2.5 6264:走出迷宫

    [题目链接] ybt 1254:走出迷宫 OpenJudge NOI 2.5 6264:走出迷宫 [题目考点] 1. 广搜 迷宫问题 [解题思路] 广搜,迷宫问题模板题. 当数据量很小时,用深搜的方法 ...

  6. BFS(入门题--迷宫)

    //这题之前用DFS写过,现在再用它来写BFS 1185: 走迷宫 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 435 Solved: 168 [Su ...

  7. C++实践 走出迷宫

    c和c++学了快一个学期了,感觉也编不出什么像样的程序,不是解决数学问题就是打印图形,感觉没什么劲.今天找了一个有趣的题目来做做,这是imooc上老师布置的一个案例.先不管算法好坏,来实现一个人走出迷 ...

  8. RL之SARSA:利用强化学习之SARSA实现走迷宫—训练智能体走到迷宫(复杂陷阱迷宫)的宝藏位置

    RL之SARSA:利用强化学习之SARSA实现走迷宫-训练智能体走到迷宫(复杂陷阱迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 后期更新-- 测试 ...

  9. RL之Q Learning:利用强化学习之Q Learning实现走迷宫—训练智能体走到迷宫(复杂迷宫)的宝藏位置

    RL之Q Learning:利用强化学习之Q Learning实现走迷宫-训练智能体走到迷宫(复杂迷宫)的宝藏位置 目录 输出结果 设计思路 实现代码 测试记录全过程 输出结果 设计思路 实现代码 f ...

最新文章

  1. poj 1006 java_POJ 1006 Biorhythms 数论-(孙子定理)
  2. Mac MacBook Pro的移动硬盘方案
  3. Java中避免if-else-if:策略模式
  4. postgreSQl pathman 用法语句总结
  5. RabbitMQ、Redis
  6. Java 6 变量 代码块
  7. 数据库系统概述--数据库习题
  8. nonebot qq机器人经常被封号怎么办?
  9. 计算机答辩ppt演讲稿,毕业答辩PPT演讲稿开场白
  10. c语言第二版第三章答案,C语言程序设计(第2版) 刘克威,张凌晓著 习题答案-第三章...
  11. 解决Mac上plt画图中文无法显示的问题
  12. 新东方校长俞敏洪给我们的告诫。
  13. 如何去掉html中input的边框
  14. soap-ws 获取wsdl中所有方法 (一)
  15. APS(高级计划与排程)基本概念
  16. 帮你快速升职的六大方法http://career.eol.cn/mian_shi_4350/20080818/t20080818_317758.shtml
  17. English语法_原型不定式
  18. spring boot整合vue项目
  19. linux hexdump显示格式c数组,linux hexdump-显示文件十六进制格式
  20. 初学者学习vue路由与无痕浏览

热门文章

  1. MATLAB 矢量场
  2. ant-design-vue中a-date-piker日期选择器的使用/全局汉化(详细)
  3. Raft 算法 详细版介绍
  4. 对比阿里云服务器和腾讯云服务器的不同之处
  5. 知名人寿保险品牌SCRM成功案例-全员营销方案赋能 提升客户管理能力
  6. 使用Selenium IDE进行自动化测试
  7. 计算机概论易错题总结:概念类
  8. 阿里云RDS数据库设置
  9. 【国际象棋】棋盘游戏-微信小程序开发流程详解
  10. 加拿大海运专线操作流程详解