BFS

POJ -- 2251 Dungeon Master

廉价感情. 提交于 2020-03-03 10:33:00
题目网址: POJ -- 2251 很典型的宽度优先搜索,尽管是一个三维的图,方法还是一模一样。 队列放入入口坐标,从入口坐标不断向外一层一层拓展,拓展到的元素进入队列并且标记该元素到入口的距离。 #include <cstdio> #include <queue> #include <cstring> #include <iostream> using namespace std; const int maxn = 50; int L, R, C; int Sz, Sx, Sy; int Ez, Ex, Ey; char maze[maxn][maxn][maxn]; int dist[maxn][maxn][maxn]; int vis[maxn][maxn][maxn]; queue<int> q; int bfs() { while(!q.empty()) q.pop(); q.push(Sz); q.push(Sx); q.push(Sy); dist[Sz][Sx][Sy] = 0; vis[Sz][Sx][Sy] = 1; /// 表示已在队列中 while(!q.empty()) { int z = q.front(); q.pop(); int x = q.front(); q.pop(); int y = q.front(); q.pop(); if(z ==

BFS实现从上往下打印二叉树

牧云@^-^@ 提交于 2020-01-07 13:56:52
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印 深度优先搜索算法(Breadth-First-Search) 深度优先算法是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。一般用队列数据结构来辅助实现BFS算法。 算法步骤 1. 首先将根节点放入队列中。 2. 从队列中取出第一个节点,并检验它是否为目标。 如果找到目标,则结束搜寻并回传结果。 否则将它所有尚未检验过的直接子节点加入队列中。 3. 若队列为空,表示整张图都检查过了——亦即图中没有欲搜寻的目标。结束搜寻并回传“找不到目标”。 4. 重复步骤2 代码实现 public ArrayList<Integer> printFromTopToBottom(TreeNode root) { if (root == null) return new ArrayList<Integer>(); ArrayList<Integer> list = new ArrayList<Integer>(); ArrayDeque<TreeNode> queue = new ArrayDeque<TreeNode>(); // 首先将根节点放入队列中 queue.offer(root);