C++ 无向图节点父亲查找算法:深度优先搜索实现
可以使用深度优先搜索(DFS)来解决这个问题。我们从任意一个节点开始,递归地遍历它的邻居节点,设置每个邻居节点的父节点为当前节点。如果一个节点已经有父节点了,就不再递归遍历它的邻居节点。
具体实现如下:
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = 100000; // 最大节点数量
vector<int> graph[MAXN+1]; // 图的邻接表表示
int parent[MAXN+1]; // 每个节点的父节点
void dfs(int node, int parent_node) {
parent[node] = parent_node; // 设置当前节点的父节点
for (int i = 0; i < graph[node].size(); i++) {
int neighbor = graph[node][i];
if (parent[neighbor] == 0) { // 如果邻居节点没有父节点,则递归遍历它
dfs(neighbor, node);
}
}
}
int main() {
int n, m; // 节点数量和边数量
cin >> n >> m;
// 读入图的边
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
graph[u].push_back(v);
graph[v].push_back(u);
}
// 从节点1开始进行深度优先搜索
dfs(1, 0);
// 输出每个节点的父亲
for (int i = 1; i <= n; i++) {
cout << parent[i] << " ";
}
cout << endl;
return 0;
}
在这个实现中,我们使用一个数组graph来表示图的邻接表,数组parent来存储每个节点的父节点。在深度优先搜索的过程中,我们使用递归来遍历每个节点的邻居节点,设置它们的父节点,并且避免重复遍历已经有父节点的节点。最后,我们输出每个节点的父节点即可。
原文地址: https://www.cveoy.top/t/topic/qjbf 著作权归作者所有。请勿转载和采集!