एक निर्देशित ग्राफ में सभी नोड्स को प्रदर्शित करने का प्रयास करते समय, गलत नोड्स प्रदर्शित होते हैं!

यह क्या है, कि मैं यहाँ गलत कर रहा हूँ? साथ ही, मैं सभी किनारों को परिभाषित करने के बजाय ग्राफ़ डिक्शनरी का उपयोग कैसे कर सकता हूं, क्या शब्दकोश का उपयोग करने का कोई तरीका है?

अपेक्षित परिणाम:

1  --> Node(s): ['2', '4']
2  --> Node(s): ['3', '5', '7']
3  --> Node(s): ['1', '6']
4  --> Node(s): ['6']
5  --> Node(s): ['7', '8']
6  --> Node(s): ['8']
7  --> Node(s): ['8', '9']
8  --> Node(s): ['9']

वास्तविक परिणाम:

1  --> Node(s): [2, 3, 4]
2  --> Node(s): [1, 3, 5, 7]
3  --> Node(s): [1, 2, 6]
4  --> Node(s): [1, 6]
5  --> Node(s): [2, 7, 8]
6  --> Node(s): [3, 4, 8]
7  --> Node(s): [2, 5, 8, 9]
8  --> Node(s): [5, 6, 7, 9]
9  --> Node(s): [7, 8]

यदि ग्राफ़ डिक्शनरी का उपयोग इस प्रकार कर रहे हैं:

graph = {'1': ['2','4'], '2': ['3', '5', '7'], '3': ['1','6'], '4': ['6'], 
         '5': ['7','8'], '6': ['8'], '7': ['8', '9'], '8': ['9']}

कोड:

n_nodes = {}

# Search for all nodes and create an empty array for each node
def add_nodes(node_array):
    for node in node_array:
        if node not in n_nodes:
            n_nodes[node] = []

def add_edge(edge):
    u, v = edge
    if (v not in n_nodes[u]) and (u not in n_nodes[v]):
        n_nodes[u].append(v)
        if (u != v):
            n_nodes[v].append(u)

add_nodes([i+1 for i in range(9)])

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

# Print All Nodes
for key in sorted(n_nodes):
    print (key, " --> Node(s):",sorted(n_nodes[key]))
0
Newbie 13 मई 2018, 21:34

1 उत्तर

सबसे बढ़िया उत्तर

आपका कोड किनारों को अप्रत्यक्ष किनारों के रूप में मान रहा है: वे हमेशा दोनों दिशाओं में जोड़े जाते हैं। तो बस उस कोड को हटा दें जो किनारे को विपरीत दिशा में जोड़ता है।

इसे बदलें:

if (v not in n_nodes[u]) and (u not in n_nodes[v]):
    n_nodes[u].append(v)
    if (u != v):
        n_nodes[v].append(u)

...प्रति:

if v not in n_nodes[u]:
    n_nodes[u].append(v)
0
trincot 13 मई 2018, 22:07