西江月・证明
即得易见平凡,仿照上例显然。留作习题答案略,读者自证不难。
反之亦然同理,推论自然成立。略去过程Q.E.D.,由上可知证毕。
有向图的遍历可以使用深度优先搜索(DFS)和广度优先搜索(BFS)两种算法来实现。
有向图的遍历
1.DFS遍历有向图的步骤:
- 选择一个起始节点,标记为已访问。
- 访问其邻接节点中第一个未被访问的节点,标记为已访问。
- 以该节点为起始节点,重复步骤2,直到没有未访问的邻接节点。
- 回溯到上一个节点,重复步骤2和步骤3,直到所有节点都被访问。
DFS遍历可以使用递归或栈来实现。
#include<bits/stdc++.h>
using namespace std;
// 建立有向图
void build_graph(vector<vector<int>>& graph, int num_edges) {
for (int i = 0; i < num_edges; i++) {
int from, to;
cin >> from >> to;
graph[from].push_back(to);
}
}
// 有向图的深度优先遍历
void dfs(vector<vector<int>>& graph, int node, vector<bool>& visited, stack<int>& result) {
visited[node] = true;
for (int i = 0; i < graph[node].size(); i++) {
int next_node = graph[node][i];
if (!visited[next_node]) {
dfs(graph, next_node, visited, result);
}
}
result.push(node);
}
// 输出拓扑排序结果
void print_topological_order(stack<int>& result) {
while (!result.empty()) {
cout &l