图算法:广度优先遍历
2013-06-25 22:04
204 查看
图的遍历算法包括广度优先遍历和深度优先遍历。其中深度遍历主要用于解答树问题的求解,而深度遍历往往为了获得最短路径解。什么是最短路径解呢?视具体情况而定,比如最短的迭代步数。在一般的隐式图中很常见,因为隐式图的规模往往是无穷的。
对于一般问题怎么思考呢?我想主要分三个步骤:分析问题(解答树or最短路径);套用框架;剪枝优化。
下面给出广度优先遍历的基本框架,关键词:队列。
明天打算研究倒水问题,应用这一方法。
对于一般问题怎么思考呢?我想主要分三个步骤:分析问题(解答树or最短路径);套用框架;剪枝优化。
下面给出广度优先遍历的基本框架,关键词:队列。
#include <queue> #include <cstring> #include <cstdio> #define ONLINE 1 using namespace std; int graph[8][8]; int visited[8]; queue<int> q; char s[8]; void bfs(int root) { q.push(root); while (!q.empty()) { int k = q.front(); q.pop(); if (visited[k] != 1) { printf("%d ", k); visited[k] = 1; } for (int j = 0; j < 8; j++) { if (graph[k][j] == 1 && visited[j] != 1) { q.push(j); } } } } int main(int argc, char *argv[]) { #if ONLINE freopen("graph.txt", "r", stdin); #endif for (int i = 0; i < 8; i++) { fscanf(stdin, "%s", s); for (int j = 0; j < 8; j++) { graph[i][j] = s[j] - '0'; } } memset(visited, 0, 8 * sizeof(int)); for (int i = 0; i < 8; i++) { if (visited[i] == 0) { bfs(i); } } return 0; }
明天打算研究倒水问题,应用这一方法。
相关文章推荐
- 算法复习 - 广度优先遍历、深度优先遍历(BFS、DFS)
- 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程
- 树的广度(深度)优先遍历算法
- 简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点
- 图的广度优先遍历算法运用队列主针对邻接表有向图
- 无向连通图的广度优先遍历算法
- 图(邻接矩阵存储)的广度优先遍历算法
- 【Java】关于二叉树的广度优先遍历及完全二叉树判定算法
- 【算法导论】二叉树的广度优先遍历
- 【算法学习】图相关算法编程实现-深度优先遍历和广度优先遍历
- 经典算法之图的广度优先搜索遍历
- 【算法导论】二叉树的广度优先遍历
- C++ Boost graph库 广度优先遍历算法示例
- 广度优先遍历BFS的图算法
- 图的邻接矩阵生成算法,深度优先遍历算法,广度优先遍历算法,Prime算法。):
- 最简洁的广度优先遍历算法模板
- 二叉树的广度优先遍历及完全二叉树判定算法 3ff0
- 简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点
- (百度笔试)简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点
- 算法笔记(5)图的广度优先遍历和深度优先遍历