可以使用深度优先搜索(DFS)来解决这个问题。

首先,创建一个长度为n的数组parent,用于存储每个节点的父节点。初始化parent数组的所有元素为-1。

然后,从任意一个节点开始进行深度优先搜索。在搜索过程中,对于每个节点v,如果其父节点parent[v]为-1,则将其父节点设置为当前节点,并继续递归地搜索v的邻居节点。这样可以确保每个节点的父节点都是最先访问到它的节点。

最后,输出parent数组中的所有元素。

以下是使用Python实现的代码:

def dfs(graph, node, parent):
    parent[node] = node
    for neighbor in graph[node]:
        if parent[neighbor] == -1:
            parent[neighbor] = node
            dfs(graph, neighbor, parent)

def find_parent(n, edges):
    graph = [[] for _ in range(n)]
    for u, v in edges:
        graph[u].append(v)
        graph[v].append(u)

    parent = [-1] * n
    dfs(graph, 0, parent)

    return parent

n = int(input('请输入节点个数:'))
edges = []
for _ in range(n-1):
    u, v = map(int, input('请输入一条边的两个节点:').split())
    edges.append((u, v))

parent = find_parent(n, edges)
print('每个节点的父节点:')
for node in parent:
    print(node)

输入示例:

请输入节点个数:4
请输入一条边的两个节点:0 1
请输入一条边的两个节点:1 2
请输入一条边的两个节点:1 3

输出示例:

每个节点的父节点:
0
0
1
1
无向图节点父节点查找:深度优先搜索算法实现

原文地址: https://www.cveoy.top/t/topic/qja7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录