已有图的邻接矩阵的条件下
#include <iostream>
#include <string>
#include <vector>
#include <queue>
using namespace std;
深度搜索(DFS)
// 图的深度搜索 depth-first-search
void dfs(int** matrix, int num, int start, vector<bool>& visited) {
// 标记当前节点已访问
visited[start] = true;
cout << start << " ";
for (int i = 0; i < num; i++) {
// 如果从当前节点到节点 i 有边 and 节点 i 未被访问过
if (matrix[start][i] > 0 and !visited[i]) {
dfs(matrix, num, i, visited);
}
}
}
广度搜索(BFS)
// 图的广度优先搜索 breadth-first-search
void bfs(int** matrix, int num, int start, vector<bool> visited) {
// 将起始节点标记为已访问并加入队列
queue<int> q;
q.push(start);
// 队列中存储的是二维数组x轴下标
visited[start] = true;
cout << start << " ";
while (!q.empty()) {
// 从队列中取出一个节点(通常是队列的第一个节点)。
// 访问该节点,并将其所有未被访问过的相邻节点标记为已访问,并将这些相邻节点加入队列。
// 重复上述步骤,直到队列为空
int current = q.front();
q.pop();
for (int i = 0; i < num; i++) {
// 如果该相邻节点没有访问过,则加入队列并标记为已访问
if (matrix[current][i] > 0 and !visited[i]) {
q.push(i);
visited[i] = true;
cout << i << " ";
}
}
}
}