【宽度优先搜索笔记】BFS输出最短路径
核心思路:用pre数组存放当前选择的前一个选择(即cur变量),然后调用递归函数打印
例:输出迷宫最短路径坐标
0010
1000
n*m迷宫,0表示路,1表示墙,从左上角走到右下角,假设最短路径唯一,输出最短路径
用pre[n][m]保存当前位置的上一个位置,递归输出
代码:
#include<iostream>
#include<queue>
using namespace std;
struct node {int x, y;node(int _x, int _y) {x = _x;y = _y;}node() {};
};
int G[10][10];
bool vis[10][10];
node pre[10][10];
int n, m;
bool judge(int i, int j) {if (vis[i][j] == true || G[i][j] == 1 || !(i >= 1 && i <= n && j >= 1 && j <= m))return false;return true;
}
void print(int x, int y) {if (x == 1 && y == 1) {cout << "(" << x << "," << y << ")" << endl;return;}node temp = pre[x][y];print(temp.x, temp.y);cout << "(" << x << "," << y << ")" << endl;return;
}
void bfs(node temp) {queue<node>q;q.push(temp);while (!q.empty()) {node cur = q.front();q.pop();int x = cur.x;int y = cur.y;vis[x][y] = true;if (x == n && y == m) {print(x, y);return;}if (judge(x + 1, y)) {pre[x + 1][y] = node(x, y);vis[x + 1][y] = true;q.push(node(x + 1, y));}if (judge(x - 1, y)) {pre[x - 1][y] = node(x, y);vis[x - 1][y] = true;q.push(node(x - 1, y));}if (judge(x, y - 1)) {pre[x][y - 1] = node(x, y);vis[x][y - 1] = true;q.push(node(x, y-1));}if (judge(x, y + 1)) {pre[x][y + 1] = node(x, y);vis[x][y + 1] = true;q.push(node(x, y + 1));}}
}
void input()
{cin >> n >> m;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> G[i][j];}}
}
int main() {input();node temp(1, 1);bfs(temp);
}
【宽度优先搜索笔记】BFS输出最短路径相关推荐
- 算法笔记01——深度优先搜索(DFS)/宽度优先搜索(BFS)
深度优先搜索(DFS) 从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直至找到最终的解.深度优先搜索从最开始的状态出发,遍历所有可以到达的状态. ...
- 层层递进——宽度优先搜索(BFS)
问题引入 我们接着上次"解救小哈"的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLi ...
- 图/树——宽度优先搜索(BFS)
转载 宽度优先搜索(BFS, Breadth First Search)是一个针对图和树的遍历算法.发明于上世纪50年代末60年代初,最初用于解决迷宫最短路径和网络路由等问题. 对于下面的树而言,BF ...
- 宽度优先搜索(BFS)
预备知识 队列 特点: 1.先进先出(FIFO) 2.从队头删除元素 3.在队尾加入元素 常见操作 1)判断队列是否为空 2)查询队列大小 3)访问队首元素 4)访问队尾元素 5)加入元素 6)删除元 ...
- 宽度优先搜索算法(BFS)详解(超级详细讲解,附有大图)
目录 一.宽度优先搜索(BFS)是什么? 二.图解宽搜(BFS) 三.对比与发现 四.工具--队列 五.模板 六.最后 一.宽度优先搜索(BFS)是什么? 百度百科这样说: 宽度优先搜索算法(又称广度 ...
- BFS(宽度优先搜索、广度优先搜索)
宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型.Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想.其别名又 ...
- 广度/宽度优先搜索(BFS)详解
1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名. 一般可以用它做什么呢?一 ...
- C++ 算法篇 广度(宽度)优先搜索(BFS)
广度优先遍历 广度优先遍历(Breadth_First_Search),又称为广度优先搜索,简称BFS. 图的BFS类似于树的层序遍历. 广度优先遍历 如图将左边的图变形,得到右边的图,然后一层一层的 ...
- 广度优先搜索 宽度优先搜索 迷宫问题 最短路径 最少操作 由近及远 队列
广度优先搜索,也叫宽度优先搜索,从开始状态,到第一次能到达的状态,再从第一次能到达的状态到下一个能到达的状态,直到探索所有可到达的状态,其时间复杂度为O(状态数×转移的方式). 广度优先搜索使用了队列 ...
最新文章
- startupinfo为什么需要初始化_为什么 TCP 建立连接要三次握手
- CTF web题总结--LFI
- C++二维数组讲解、二维数组的声明和初始化
- 【笔试题】京东2017秋招笔试真题
- Sequence 带来的更多乐趣
- xml报错:xml.etree.ElementTree.ParseError: not well-formed (invalid token)
- ppt上的倒计时小工具_英孚线上精品小班课平台操作指南这些课堂小工具你都知道吗?更多课前指引看这里!...
- 设计模式-第三篇之工厂方法和抽象工厂
- node.js 谷歌翻译api
- UG编程加工之非切削移动
- 计算机基础-路由器、光猫、交换机、电脑之间的连接关系
- 自下而上分析方法-算符优先,LR(0),SLR,LR(1),LALR大全
- 2021-12-21 理解JS中的shim / polyfill / 垫片概念
- oracle库存计算公式,问安全库存量计算公式
- 时寒冰:中国房价下跌序幕刚刚拉开
- 学生免费申请JetBrains许可证
- 发明计算机作文300字,发明作文300字
- Linux mysql5.7安装-超级详细
- [leetcode]1140.捡石头(动态规划做法)
- python开发之路-第二章