76 lines
3.4 KiB
Python
76 lines
3.4 KiB
Python
![]() |
import sys
|
||
|
|
||
|
def printSolution(dist, graph):
|
||
|
print("Odleglosc punktow od wyznaczonego")
|
||
|
for node in range(len(graph)):
|
||
|
print("Punkt: {} odleglosc: {}".format(node, dist[node]))
|
||
|
|
||
|
|
||
|
def minDistance(graph, 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
|
||
|
|
||
|
|
||
|
def dijkstra(src, graph):
|
||
|
dist = [sys.maxsize] * len(graph)
|
||
|
dist[src] = 0
|
||
|
sptSet = [False] * len(graph)
|
||
|
|
||
|
for cout in range(len(graph)):
|
||
|
u = minDistance(graph, 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]
|
||
|
|
||
|
printSolution(dist, graph)
|
||
|
|
||
|
|
||
|
# Graf, koszt przejscia 1
|
||
|
# 1- 2- 3- 4- 5
|
||
|
# |
|
||
|
# 10- 9- 8- 7- 6
|
||
|
# |
|
||
|
# 11-12-13-14-15
|
||
|
# |
|
||
|
# 20-19-18-17-16
|
||
|
# |
|
||
|
# 21-22-23-24-25
|
||
|
|
||
|
graph = [[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #1
|
||
|
[1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #2
|
||
|
[0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #3
|
||
|
[0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #4
|
||
|
[0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #5
|
||
|
[0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #6
|
||
|
[0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #7
|
||
|
[0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #8
|
||
|
[0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #9
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #10
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #11
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #12
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #13
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], #14
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], #15
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], #16
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], #17
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0], #18
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0], #19
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0], #20
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0], #21
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0], #22
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], #23
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1], #24
|
||
|
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0] ] #25
|
||
|
|
||
|
|
||
|
#wypisuje tylko odpowiednio koszt przejscia do danego punktu
|
||
|
#struktura grafu jest na tyle uproszczona ze nie trzeba wypisywac po kolei ktore punkty odwiedzamy
|
||
|
#bo idziemy albo o punkt nizej albo wyzej
|
||
|
#oczywiscie da to sie wszystko jakos bardziej rozwinac
|
||
|
|
||
|
dijkstra(2, graph)
|