核心思路:用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输出最短路径相关推荐

  1. 算法笔记01——深度优先搜索(DFS)/宽度优先搜索(BFS)

    深度优先搜索(DFS) 从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直至找到最终的解.深度优先搜索从最开始的状态出发,遍历所有可以到达的状态. ...

  2. 层层递进——宽度优先搜索(BFS)

    问题引入 我们接着上次"解救小哈"的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLi ...

  3. 图/树——宽度优先搜索(BFS)

    转载 宽度优先搜索(BFS, Breadth First Search)是一个针对图和树的遍历算法.发明于上世纪50年代末60年代初,最初用于解决迷宫最短路径和网络路由等问题. 对于下面的树而言,BF ...

  4. 宽度优先搜索(BFS)

    预备知识 队列 特点: 1.先进先出(FIFO) 2.从队头删除元素 3.在队尾加入元素 常见操作 1)判断队列是否为空 2)查询队列大小 3)访问队首元素 4)访问队尾元素 5)加入元素 6)删除元 ...

  5. 宽度优先搜索算法(BFS)详解(超级详细讲解,附有大图)

    目录 一.宽度优先搜索(BFS)是什么? 二.图解宽搜(BFS) 三.对比与发现 四.工具--队列 五.模板 六.最后 一.宽度优先搜索(BFS)是什么? 百度百科这样说: 宽度优先搜索算法(又称广度 ...

  6. BFS(宽度优先搜索、广度优先搜索)

    宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型.Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想.其别名又 ...

  7. 广度/宽度优先搜索(BFS)详解

    1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名. 一般可以用它做什么呢?一 ...

  8. C++ 算法篇 广度(宽度)优先搜索(BFS)

    广度优先遍历 广度优先遍历(Breadth_First_Search),又称为广度优先搜索,简称BFS. 图的BFS类似于树的层序遍历. 广度优先遍历 如图将左边的图变形,得到右边的图,然后一层一层的 ...

  9. 广度优先搜索 宽度优先搜索 迷宫问题 最短路径 最少操作 由近及远 队列

    广度优先搜索,也叫宽度优先搜索,从开始状态,到第一次能到达的状态,再从第一次能到达的状态到下一个能到达的状态,直到探索所有可到达的状态,其时间复杂度为O(状态数×转移的方式). 广度优先搜索使用了队列 ...

最新文章

  1. startupinfo为什么需要初始化_为什么 TCP 建立连接要三次握手
  2. CTF web题总结--LFI
  3. C++二维数组讲解、二维数组的声明和初始化
  4. 【笔试题】京东2017秋招笔试真题
  5. Sequence 带来的更多乐趣
  6. xml报错:xml.etree.ElementTree.ParseError: not well-formed (invalid token)
  7. ppt上的倒计时小工具_英孚线上精品小班课平台操作指南这些课堂小工具你都知道吗?更多课前指引看这里!...
  8. 设计模式-第三篇之工厂方法和抽象工厂
  9. node.js 谷歌翻译api
  10. UG编程加工之非切削移动
  11. 计算机基础-路由器、光猫、交换机、电脑之间的连接关系
  12. 自下而上分析方法-算符优先,LR(0),SLR,LR(1),LALR大全
  13. 2021-12-21 理解JS中的shim / polyfill / 垫片概念
  14. oracle库存计算公式,问安全库存量计算公式
  15. 时寒冰:中国房价下跌序幕刚刚拉开
  16. 学生免费申请JetBrains许可证
  17. 发明计算机作文300字,发明作文300字
  18. Linux mysql5.7安装-超级详细
  19. [leetcode]1140.捡石头(动态规划做法)
  20. python开发之路-第二章

热门文章

  1. tinymce中粘贴word文本时保留格式
  2. Linux 命令 - touch
  3. 使用批处理设置、启动和停止服务
  4. Dynamic Programming之Longest Increasing Subsequence (LIS)问题
  5. POJ NOI0107-06 合法 C 标识符【文本处理】
  6. HDU2548 两军交锋【数学计算+水题】
  7. C++实现的大整数分解Pollard's rho算法程序
  8. 使用 Python 第三方库 daft 绘制 PGM 中的贝叶斯网络
  9. hann function
  10. CSS(网页样式语言)基础