Ich versuche, einen "Breite-zuerst" -Algorithmus als eine Variation von etwas, das ich in einem Buch gesehen habe, zu implementieren.Britth-First-Algorithmus-Implementierung
Mein Problem ist, dass der Algorithmus die Elemente jedes Knotens nicht in die Warteschlange einfügt.
Zum Beispiel, wenn ich für „black lab“ unter dem Namen ‚mariela‘ in der „Suche()“ Funktion zu suchen, werde ich die richtige Ausgabe: „Simon ist ein schwarzes Labor“
jedoch Ich sollte nach "black lab" in "walter" suchen können, das mit "mariela" verbunden ist, das mit "simon" verbunden ist, der ein "schwarzes Labor" ist. Das funktioniert nicht.
Habe ich einen Anfängerfehler in meiner Implementierung dieses Algorithmus gemacht, oder habe ich mein Diagramm falsch eingerichtet?
Wie immer wird jede/alle Hilfe sehr geschätzt!
from collections import deque
# TEST GRAPH -------------
graph = {}
graph['walter'] = ['luci', 'kaiser', 'andrea', 'mariela']
graph['andrea'] = ['echo', 'dante', 'walter', 'mariela']
graph['mariela'] = ['ginger', 'simon', 'walter', 'andrea']
graph['kaiser'] = 'german shepherd'
graph['luci'] = 'black cat'
graph['echo'] = 'pitbull'
graph['dante'] = 'pitbull'
graph['ginger'] = 'orange cat'
graph['simon'] = 'black lab'
def condition_met(name):
if graph[name] == 'black lab':
return name
def search(name):
search_queue = deque()
search_queue += graph[name] # add all elements of "name" to queue
searchedAlready = [] # holding array for people already searched through
while search_queue: # while queue not empty...
person = search_queue.popleft() # pull 1st person from queue
if person not in searchedAlready: # if person hasn't been searched through yet...
if condition_met(person):
print person + ' is a black labrador'
return True
else:
search_queue += graph[person]
searchedAlready.append(person)
return False
search('walter')
#search('mariela')
Danke. Ich gebe das eine Chance. – JohnWayne360
Ich habe Ihren Code mit --- drucken Suche (Graph, 'Walter', 'Deutsch Shepherd') - es hat nicht die richtige Ausgabe zurückgegeben. Ich habe stattdessen einen Fehler erhalten. – JohnWayne360
Der Grund dafür ist, dass es keinen Knoten namens 'pitbull' gibt. Selbst wenn Sie Kindknoten namens 'pitbull' haben, haben Sie keinen Knoten in Ihrem Graph 'pitbull'. Entweder A) 'graph ['pitbull'] = [] 'oder B) ändern Sie diese Zeile' queue.extend (graph [node]) 'in' queue.extend (graph.get (node, [])) ' – EyuelDK