Xinef

Dijkstra bazowy

May 15th, 2025
507
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.67 KB | Source Code | 0 0
  1. import math
  2. import time
  3.  
  4.  
  5.  
  6. def rysujGraf(x: int, y: int, graf):
  7.   #top bar
  8.   foo = '/'
  9.   for i in range(0,x-1):
  10.     foo = foo + '----'
  11.   print(foo+'---\\')
  12.  
  13.   # rows
  14.   for iy in range(0,y):
  15.     foo = '|'
  16.     for ix in range(0,x):
  17.       value = graf[iy][ix]
  18.       value3digit = ''
  19.       if value < 10:
  20.         value3digit = '  ' + str(value)
  21.       elif value < 100:
  22.         value3digit = ' ' + str(value)
  23.       else:
  24.         value3digit = '' + str(value)
  25.       foo = foo + value3digit + '|'
  26.     print(foo)
  27.     if iy != y-1:
  28.       foo = '|'
  29.       for i in range(0, x - 1):
  30.         foo = foo + '----'
  31.       print(foo + '---|')
  32.  
  33.   #bottom bar
  34.   foo = '\\'
  35.   for i in range(0, x-1):
  36.     foo = foo + '----'
  37.   print(foo + '---/')
  38.  
  39.  
  40. def czyIstniejąNieodwiedzone(x: int, y: int, odwiedzone):
  41.   # sprawdzić w tablicy odwiedzone czy istnieje choć jeden nieodwiedzony
  42.   # ...
  43.   return False
  44.  
  45.  
  46. if __name__ == '__main__':
  47.   # wczytaj wymiary grafu
  48.   x = int(input())
  49.   y = int(input())
  50.  
  51.   # utwórz graf o podanych wymiarach, inicjalizując odległości 999
  52.   graf = [[999 for ix in range(x)] for iy in range(y)]
  53.   # ustaw odległość w startowym narożniku na 0
  54.   graf[0][0] = 0
  55.  
  56.   # rysuj graf
  57.   rysujGraf(x,y,graf)
  58.  
  59.   # utwórz tablicę przejść między komórkami grafu
  60.   # przejścia kodowane są po kolei:
  61.   # [G, P, D, L]
  62.   # G - w górę
  63.   # P - w prawo
  64.   # D - w dół
  65.   # L - w lewo
  66.   # wartość 0 oznacza brak przejścia
  67.   tab = [[[0,0,0,0] for ix in range(x)] for iy in range(y)]
  68.  
  69.   # wczytaj wagi przejść (0 - brak przejścia)
  70.   for iy in range(0,y):
  71.     for ix in range(0,x):
  72.       for d in range(4):
  73.         tab[iy][ix][d] = int(input())
  74.  
  75.   print(tab)
  76.  
  77.   # Dijkstra
  78.  
  79.   # inicjalizacja
  80.   # oznaczyć wszystkie węzły jako nieodwiedzone
  81.   odwiedzone = [[False for ix in range(x)] for iy in range(y)]
  82.  
  83.   # ustawić jeden z węzłów jako startowy (tutaj węzeł 0,0 - lewy górny narożnik)
  84.   aktualnyX = 0
  85.   aktualnyY = 0
  86.  
  87.   # dopóki istnieją nieodwiedzone węzły powtarzamy:
  88.   while czyIstniejąNieodwiedzone(x, y, odwiedzone):
  89.     # ustaw nieodwiedzony węzeł z najniższą wartością jako aktualny
  90.     # ...
  91.  
  92.     # aktualizacja sąsiadów
  93.     # dla aktualnego węzła sprawdzamy przejścia w każdym z 4 kierunków
  94.     # jeśli wartość przejścia <= 0, ignorujemy
  95.     # jeśli wartość przejścia > 0 obliczamy nowy dystans jako sumę wartości
  96.     # aktualnego węzła i długości sprawdzanego połączenia
  97.     # ustawiamy wartość węzła w danym kierunku na mniejszą z wartości
  98.     # ...
  99.  
  100.  
  101.     # zaznaczenie aktualnego węzła jako odwiedzonego
  102.     # ...
  103.  
  104.     rysujGraf(x, y, graf)
  105.     time.sleep(1)
  106.  
Advertisement
Add Comment
Please, Sign In to add comment