Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- import time
- def rysujGraf(x: int, y: int, graf):
- #top bar
- foo = '/'
- for i in range(0,x-1):
- foo = foo + '----'
- print(foo+'---\\')
- # rows
- for iy in range(0,y):
- foo = '|'
- for ix in range(0,x):
- value = graf[iy][ix]
- value3digit = ''
- if value < 10:
- value3digit = ' ' + str(value)
- elif value < 100:
- value3digit = ' ' + str(value)
- else:
- value3digit = '' + str(value)
- foo = foo + value3digit + '|'
- print(foo)
- if iy != y-1:
- foo = '|'
- for i in range(0, x - 1):
- foo = foo + '----'
- print(foo + '---|')
- #bottom bar
- foo = '\\'
- for i in range(0, x-1):
- foo = foo + '----'
- print(foo + '---/')
- def czyIstniejąNieodwiedzone(x: int, y: int, odwiedzone):
- # sprawdzić w tablicy odwiedzone czy istnieje choć jeden nieodwiedzony
- # ...
- return False
- if __name__ == '__main__':
- # wczytaj wymiary grafu
- x = int(input())
- y = int(input())
- # utwórz graf o podanych wymiarach, inicjalizując odległości 999
- graf = [[999 for ix in range(x)] for iy in range(y)]
- # ustaw odległość w startowym narożniku na 0
- graf[0][0] = 0
- # rysuj graf
- rysujGraf(x,y,graf)
- # utwórz tablicę przejść między komórkami grafu
- # przejścia kodowane są po kolei:
- # [G, P, D, L]
- # G - w górę
- # P - w prawo
- # D - w dół
- # L - w lewo
- # wartość 0 oznacza brak przejścia
- tab = [[[0,0,0,0] for ix in range(x)] for iy in range(y)]
- # wczytaj wagi przejść (0 - brak przejścia)
- for iy in range(0,y):
- for ix in range(0,x):
- for d in range(4):
- tab[iy][ix][d] = int(input())
- print(tab)
- # Dijkstra
- # inicjalizacja
- # oznaczyć wszystkie węzły jako nieodwiedzone
- odwiedzone = [[False for ix in range(x)] for iy in range(y)]
- # ustawić jeden z węzłów jako startowy (tutaj węzeł 0,0 - lewy górny narożnik)
- aktualnyX = 0
- aktualnyY = 0
- # dopóki istnieją nieodwiedzone węzły powtarzamy:
- while czyIstniejąNieodwiedzone(x, y, odwiedzone):
- # ustaw nieodwiedzony węzeł z najniższą wartością jako aktualny
- # ...
- # aktualizacja sąsiadów
- # dla aktualnego węzła sprawdzamy przejścia w każdym z 4 kierunków
- # jeśli wartość przejścia <= 0, ignorujemy
- # jeśli wartość przejścia > 0 obliczamy nowy dystans jako sumę wartości
- # aktualnego węzła i długości sprawdzanego połączenia
- # ustawiamy wartość węzła w danym kierunku na mniejszą z wartości
- # ...
- # zaznaczenie aktualnego węzła jako odwiedzonego
- # ...
- rysujGraf(x, y, graf)
- time.sleep(1)
Advertisement
Add Comment
Please, Sign In to add comment