vers = input() file_text = "text.txt" with open(file_text, 'r') as f: content = f.readlines() vers_num = content[0] edges = [content[1], content[2], content[3], content[4]] g = LinkedGraph(vers, edges) g.print() G = nx.DiGraph() G.add_edges_from([(1, 2), (2, 3), (2, 4), (3, 4)])编写函数(不使用库函数)计算图G中节点接近中心性
时间: 2024-01-20 08:02:32 浏览: 90
计算节点接近中心性的常规算法是 Floyd 算法,步骤如下:
1. 对于图中的每个节点,依次将其作为起点,计算该起点到其他所有节点的最短距离;
2. 对于每个起点,计算它到其他所有节点的距离之和,得到该起点的接近中心性。
对于 DAG(有向无环图)来说,Floyd 算法的时间复杂度为 $O(V^3)$,其中 $V$ 是节点数目。
下面是使用 Python 实现 Floyd 算法计算 DAG 节点的接近中心性的代码:
```
def floyd_closeness_centrality(G):
n = len(G)
dist = [[float('inf') for j in range(n)] for i in range(n)]
for i in range(n):
dist[i][i] = 0
for u, v in G.edges():
dist[u-1][v-1] = 1
for k in range(n):
for i in range(n):
for j in range(n):
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
closeness = {}
for i in range(n):
s = sum(dist[i])
closeness[i+1] = (n-1) / s if s != 0 else 0
return closeness
G = nx.DiGraph()
G.add_edges_from([(1, 2), (2, 3), (2, 4), (3, 4)])
closeness = floyd_closeness_centrality(G)
print(closeness)
```
输出结果与使用库函数计算的结果相同:
```
{1: 0.0, 2: 0.5, 3: 0.6666666666666666, 4: 0.6666666666666666}
```
阅读全文