图算法:广度优先遍历
图的遍历算法包括广度优先遍历和深度优先遍历。其中深度遍历主要用于 解答树问题 的求解,而 深度遍历 往往为了获得 最短路径解 。什么是最短路径解呢?视具体情况而定,比如 最短的迭代步数 。在一般的隐式图中很常见,因为隐式图的规模往往是无穷的。 对于一般问题怎么思考呢?我想主要分三个步骤: 分析问题(解答树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