3

실습을 위해 tarjan 알고리즘을 구현하려고합니다. 임의의 그래프를 생성하여 한 번에 하나의 가장자리를 추가하여 알고리즘에 입력으로 제공하기로 결정했습니다.networkx에서 edgelist의 사용자 지정 출력

from networkx import * 
import sys 
import matplotlib.pyplot as plt 

n = 10 # 10 nodes 
m = 20 # 20 edges 

G = gnm_random_graph(n, m) 

# print the adjacency list to a file 
try: 
    nx.write_edgelist(G, "test.edgelist", delimiter=',') 
except TypeError: 
    print "Error in writing output to random_graph.txt" 

fh = open("test.edgelist", 'rb') 
G = nx.read_adjlist(fh) 
fh.close() 

이하 나는 이런 식으로 뭔가있는 test.edgelist 파일에있어 출력을 같이

나는 랜덤 그래프를 생성하고 파일에 저장된.

0,4,{} 
0,5,{} 
0,6,{} 
1,8,{} 
1,3,{} 
1,4,{} 
1,7,{} 
2,8,{} 
2,3,{} 
2,5,{} 
3,8,{} 
3,7,{} 
4,8,{} 
4,9,{} 
5,8,{} 
5,9,{} 
5,7,{} 
6,8,{} 
6,7,{} 
7,9,{} 

어떻게 지금, 내가 구현 한 tarjan의 알고리즘, 입력은 형식 I 입력으로 제공하는 루프에서 무작위로 생성 된 그래프를 사용하고자하는

add_edge(1,2) 
add_edge(2,3) 
.... 

입니다.

어떻게 {}을 얻지 못합니까? 또한 이것을 구현하는 더 좋은 방법이 있다면 대용량 데이터 세트의 경우 단일 목록으로 저장하기가 어려우므로 도움을 받으십시오 (add_edge()는 목록에 가장자리를 추가 함)

답변

3

당신은 False로 설정 data 매개 변수를 사용하여 모든 가장자리 데이터를 삭제해야합니다 :

nx.write_edgelist(G, "test.edgelist", delimiter=',', data = False) 

출력 : 그러나 당신이 여기 같은 사이클을 사용하여 자신 만의 형식으로 가장자리를 저장하려는 경우

0,3 
0,4 
0,1 
0,8 
0,6 
0,7 

:

,
from networkx import gnm_random_graph 

n = 10 # 10 nodes 
m = 20 # 20 edges 

G = gnm_random_graph(n, m) 

# iterate over all edges 
with open('./test.edgelist', 'w') as f: 
    for edge in G.edges(): 
     f.write("add_edge{0}\n".format(edge)) 

출력 :

add_edge(0, 7) 
add_edge(0, 4) 
add_edge(0, 8) 
add_edge(0, 3) 
add_edge(0, 2) 
add_edge(1, 5) 
add_edge(1, 6) 
add_edge(1, 7) 
add_edge(2, 5) 
add_edge(2, 4) 
add_edge(2, 9) 
add_edge(2, 8) 
add_edge(2, 3) 
add_edge(3, 9) 
add_edge(3, 5) 
add_edge(4, 9) 
add_edge(4, 7) 
add_edge(5, 9) 
add_edge(6, 9) 
add_edge(7, 9)