将图形写入邻接列表形式的文件[提及每行中每个节点的所有邻居]

时间:2016-01-21 07:16:17

标签: python networkx writefile undirected-graph

我需要在文本文件中编写一个图形,其中文件的每一行由一个节点组成,后跟其所有邻居。它基本上是Adjacency List是什么,以及函数write_adjlist应该做什么。不幸的是,事实并非如此,因为边缘没有复制。在维基百科的例子中,邻接列表是:

  

a与b,c

相邻      

b与a,c

相邻      

c与a,b相邻

我们可以看到所有边都出现两次(第1行和第2行中的边(a,b),第2行和第3行中的边(b,c))。

但现在如果我使用以下代码生成一个小型世界网络:

import networkx as nx

N=5  #Number of nodes
v=2  #Number of neighbours
p=.1 #rewiring proba

G = nx.connected_watts_strogatz_graph(N,v,p)
nx.write_adjlist(G.to_undirected(),"test.txt")
它给了我:

#adj.py
# GMT Thu Jan 21 06:57:29 2016
# watts_strogatz_graph(5,2,0.1)
0 1 4
1 2
2 3
3 4
4

我想要的地方

0 1 4
1 2 0
2 3 1
3 2 4 
4 0 3

你知道如何获得我想要的输出吗?

1 个答案:

答案 0 :(得分:1)

实际上这就是定义dfd3的方式,以便按照您想要的方式编写文件,可以使用以下函数完成:

write_adjlist

文件输出为:

def adj_list_to_file(G,file_name):
    f = open('tst.txt', "w")
    for n in G.nodes():
        f.write(str(n) + ' ')
        for neighbor in G.neighbors(n):
            f.write(str(neighbor) + ' ')
        f.write('\n')

N=5  #Number of nodes
v=2  #Number of neighbours
p=.1 #rewiring proba
G = nx.connected_watts_strogatz_graph(N,v,p)
nx.draw(G, with_labels= True)
plt.show()
adj_list_to_file(G.to_undirected(),"tst.txt")