From: Skullheadx Date: Wed, 8 Feb 2023 22:27:36 +0000 (-0500) Subject: Update S4.py X-Git-Url: http://git.skullheadx.com/nixos/static/projects.html?a=commitdiff_plain;h=e27b85f1a794cefe79914de8ea7b746519e86fe5;p=CCC.git Update S4.py --- diff --git a/Main/Python/2021/S4.py b/Main/Python/2021/S4.py index 21c7901..98cf4be 100644 --- a/Main/Python/2021/S4.py +++ b/Main/Python/2021/S4.py @@ -10,48 +10,56 @@ # # # """ +from queue import Queue def swap(i, j): stations[i], stations[j] = stations[j], stations[i] -def get_next_station(m, station): - if m > len(stations) and station != N: - return False - - if station == N: - outputs.append(m) - return True - # take a walkway - if station in walkways: - for destination in walkways[station]: - get_next_station(m + 1, destination) - - if m < len(stations): - train = stations[m] - # take a train - if train == station: - if m < len(stations) - 1: - get_next_station(m + 1, stations[m + 1]) - # wait at the station - get_next_station(m + 1, station) - - - N, W, D = tuple(map(int, input().split())) walkways = dict() for i in range(W): A, B = tuple(map(int, input().split())) walkways[A] = walkways.get(A, list()) + [B] -outputs = [] -test = [] - stations = list(map(int, input().split())) + for i in range(D): X, Y = tuple(map(int, input().split())) - swap(X - 1, Y - 1) - outputs.clear() - get_next_station(0, 1) - print(min(outputs)) \ No newline at end of file + swap(X-1, Y-1) + + + + q = Queue() + q.put((0, 1)) + + + + visited = set() + + while not q.empty(): + m, station = q.get() + + if (m, station) in visited: + continue + visited.add((m, station)) + + if m > len(stations): + continue + + if station == N: + print(m) + break + # print(f"q:{q.qsize()}") + + # take a walkway + if station in walkways: + for destination in walkways[station]: + q.put((m + 1, destination)) + + # take a train + if stations[m] == station and m + 1 < len(stations): + q.put((m + 1, stations[m + 1])) + # wait at the station + q.put((m + 1, station))