2016-08-24 5 views
0

그래서 비 주기적 그래프의 전이 감소를 수행하는 코드를 작성하려고합니다. 그래서 요소는 다음일시적 감소 - 코드의 오류 - Python

(3, 5), (5, 2), (2,1), (4,2), (3,1), (4,1)

이 내가 지금까지 쓴 것입니다 :

graph = [[3, 5],[5, 2],[2, 1],[4, 2],[3, 1],[4, 1]] 

for i in range(len(graph)): 
    for j in range(len(graph)): 
     for k in range(len(graph)): 
      if [i,j] in graph and [j,k] in graph: 
       a = [i,k] 
       graph.pop(a) 
print(graph)     

을 내가 함께 다음과 같은 얻을 것으로 예상하고 실행 한 후 (4,1) 제거 :

>> (3, 5), (5, 2), (2, 1), (4, 2), (3, 1) 

그러나 대신 다음을 반환합니다.

>> (3, 5), (5, 2), (2, 1), (4, 2), (3, 1), (4, 1) 

내가 잘못하고있는 것을 파악할 수 없습니다. 누군가가 오류를 지적하면 좋을 것입니다!

P.S : 그래프의 중복 에지가 전송 부족으로 제거됩니다. 예 :

(A -> B) 및 (B -> C), 다음 (A -> C) 즉, A가 B에 연결되고 B가 C에 연결되면 A는 또한이 경우 (A -> C)는 A가 C를 통해 C에 도달 할 수 있으므로 중복되어야하므로 제거해야합니다.

+0

dfs 트리에 관심이있을 수 있습니다. 구글 그것. – sashas

답변

1

코드가 향상되어 어떤 경우에는 전송률 감소가 나타나고 요소 [i, k]가 존재하지 않기 때문에 조건을 추가했습니다 (if a in graph:). 또한 pop() 함수는 remove()과 같은 객체가 아니라 인덱스별로 요소를 제거합니다.

graph = [[3, 5],[5, 2],[2, 1],[4, 2],[3, 1],[4, 1]] 

for i in range(len(graph)): 
    for j in range(len(graph)): 
     for k in range(len(graph)): 
      if [i,j] in graph and [j,k] in graph: 
       a = [i,k] 
       if a in graph: 
        graph.remove(a) 
print(graph)  

이 정보가 도움이되기를 바랍니다.

+0

@Javieryes 그 완벽한 .. 한가지 더, 나는이 그래프를 그려 보면 3이 1에서 5와 2에 도달 할 수 있기 때문에 (3,1)도 중복된다는 것을 알 수 있습니다. 그러나 코드에서 (3, 1). 어쨌든 그걸 도와 줄 수 있니? – user3624406