1.9 KiB
1.9 KiB
Route planning
Spis treści
Informacje
Omawiane fragmenty kodu znajdują się w pliku dijkstra.py
.
Po uruchomieniu programu, użytkownik ma do wyboru samodzielne sterowanie traktorem przy pomocy strzałek (1) lub podawanie punktów wykorzystujące planowanie ruchu (0). Przy wyborze drugiej z opcji, aby wykonać ruch, użytkownik w aktywnym oknie programu naciska spację, po czym podaje dwa punkty.
Pętla główna
Implementacja algorytmu Dijkstry:
def dijkstra(src):
dist = [sys.maxsize] * len(graph)
dist[src] = 0
sptSet = [False] * len(graph)
for cout in range(len(graph)):
u = minDistance(dist, sptSet)
sptSet[u] = True
for v in range(len(graph)):
if graph[u][v] > 0 and sptSet[v] == False and dist[v] > dist[u] + graph[u][v]:
dist[v] = dist[u] + graph[u][v]
return dist
Dla src
będącego wierzchołkiem źródłowym, funkcja zwraca koszt przejścia do każdego punktu w grafie w postaci listy dist
.
Dopóki nie zostaną rozpatrzone wszystkie wierzchołki, pętla:
- za wierzchołek
u
przyjmuje wierzchołek najbliższy źródła, który nie został jeszcze rozważony - dla każdego sąsiada
v
wierzchołkau
, jeżeli przezu
da się dojść dov
szybciej niż dotychczasową ścieżką, to wykonuje podstawienie:dist[v] = dist[u] + graph[u][v]
.
Funkcja następnika
def minDistance(dist, sptSet):
mini = sys.maxsize
for v in range(len(graph)):
if dist[v] < mini and sptSet[v] == False:
mini = dist[v]
min_index = v
return min_index
Funkcja zwraca indeks wierzchołka, który jest najbliższej źródła, a nie został jeszcze rozważony, przeszukując w tym celu pozostałe wierzchołki grafu.