2016-09-24 2 views
0

Es gibt viele wirklich gute DFS-Python-Implementierungen wie this one, aber keine von ihnen enthalten Kosten. Ich möchte in der Lage sein, die Gesamtkosten eines DFS-Pfads aufzuzeichnen, aber diese Implementierung stellt das Diagramm als ein Wörterbuch von Sätzen dar.Tiefe zuerst ändern Suche mit Wörterbüchern

graph = {'A': set(['B', 'C']), 
     'B': set(['A', 'D', 'E']), 
     'C': set(['A', 'F']), 
     'D': set(['B']), 
     'E': set(['B', 'F']), 
     'F': set(['C', 'E'])} 

def dfs(graph, start): 
    visited, stack = set(), [start] 
    while stack: 
     vertex = stack.pop() 
     if vertex not in visited: 
      visited.add(vertex) 
      stack.extend(graph[vertex] - visited) 
    return visited 

dfs(graph, 'A') # {'E', 'D', 'F', 'A', 'C', 'B'} 

Ich glaube nicht, Sets könnten angemessen Kosten erfassen. Ich denke also, dass es eine gute Möglichkeit wäre, die Grafik als Wörterbücherwörterbuch darzustellen. d. h .:

Meine Frage ist, wie könnte dieser Algorithmus geändert werden, um stattdessen eine neue Art von Graphen zu verwenden? Ich bin mit der Python-Syntax immer noch nicht vertraut, ein solches Beispiel zu sehen hilft also wirklich.

Alternativ kann, wenn es eine noch einfachere Möglichkeit ist kostengünstig darzustellen, ich bin offen für Vorschläge

EDIT: Okay, hier ist eine andere Möglichkeit, darüber nachzudenken. Wie kann ich den obigen Code so ändern, dass er die verschachtelten Wörterbücher ähnlich behandelt wie Sätze?

EDIT2: Ich glaube, ich habe es selbst gelöst, jetzt, da ich die Tasten() Funktion von Wörterbüchern verstehe, gibt eine Liste zurück.

+0

Sie sollten diese Frage auf [Code Review] (http://codereview.stackexchange.com/) verschieben –

+0

Ich denke, dass verschachtelte Wörterbücher, wie Sie vorgeschlagen, eine gute Idee wäre - werfen Sie einen Blick auf JSON-Format, das ist vielleicht was du brauchst. DFS hat auch nicht wirklich mit Kosten zu tun, daher sollten Sie sich andere Algorithmenimplementierungen wie Dijkstra usw. ansehen, die die Kosten als wesentlichen Teil des Algorithmus verwenden. – coder

+0

Ich weiß, dass DFS Kosten nicht verwendet, aber es kann immer noch aufzeichnen. – Bob

Antwort

0

Sieht aus wie NetworkX ist, was Sie suchen. DFS ist in dem Paket enthalten und seine Graphimplementierung ist was Sie möchten. Ich hoffe es hilft.

+0

Das ist interessant, aber da ich immer noch Python lerne, dachte ich, es wäre nützlicher zu sehen, wie es mit den Standard-Python-Bibliotheken gemacht wird. – Bob

+0

Es ist eine äußerst intuitive Struktur zum Erstellen von Grafiken. Sehr empfehlenswert. – mengg

Verwandte Themen