Ξέρει κανείς κανένα αλγόριθμο για path_find σε γράφημα ή υλοποίηση σε γλώσσα python
Προσπαθώ να λύσω αυτό
py.checkio.org/mission/open-labyrinth/
και μου βγάζει λάθος διαδρόμους συνέχεια
Η συνάρτηση μου για το graph είναι αυτή
def lab_graph(labt):
midenika=[]
for i in range(len(labt)): #Διαβάζω τα μηδενικά
for j in range(len(labt[0])):
if labt[i][j]==0:
midenika.append((i,j))
graph={}
for a in midenika: #κάνω το γράφημα βάζοντας σε κάθε μηδενικό αυτά που μπορεί να πάει σε μία κίνηση
graph[a]=[]
for x,y in midenika:
if (x,y+1) in midenika:
graph[(x,y)].append((x,y+1))
if (x,y-1) in midenika:
graph[(x,y)].append((x,y-1))
if (x-1,y) in midenika:
graph[(x,y)].append((x-1,y))
if (x+1,y) in midenika:
graph[(x,y)].append((x+1,y))
komboi=[] #παίρνω τους κόμβους (διασταυρώσεις) μήπως τις χρειαστώ
for a in graph:
if len(graph[a])>2:
komboi.append(a)
dromoi=[]#παίρνω τους δρόμους μήπως τουςς χρειαστώ
for start in graph:
for end in graph[start]:
dromoi.append((start,end))
return graph, komboi, dromoi # παίρνω επιστροφή
και για το path αυτή
def vres_path (start, end, graph,path=None): #Ή συνάρτηση για να βρώ το path
if path==None:
path=[]
path.append(start)
if start==end:
return path
for a in graph[start]:
if a not in path:
end_path=vres_path(a,end,graph,path)
if end_path:
return end_path
return None