Skip to content

Commit 543f97e

Browse files
committed
Create ala_bob.py
1 parent fab1123 commit 543f97e

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

Classes/ala_bob.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
from queue import PriorityQueue
2+
# Dana jest mapa kraju w postaci grafu G = (V, E), gdzie wierzcholki to
3+
# miasta a krawedzie to drogi laczace miasta. Da kazdej drogi znana jest jej dlugosc (wyrazona w kilometrach# BOB jedzie za darmo
4+
# jako liczba naturalna). Alicja i Bob prowadza (na zmiane) autobus z miasta « € V do miasta y € V, zamienia-
5+
# jac sie za kierownica w kazdym kolejnym miescie. Alicja wybiera trase oraz decyduje, kto prowadzi pierwszy. Prosze zapropnowac algorytm, który wskazuje taka trase (oraz osobe, która ma prowadzié pierwsza), zeby Alicia przeiechala jak naimniei kilometrów. Algorvtm powinien bvé jak naiszvbszy (ale prede wszvstkim
6+
# poprawn).
7+
8+
BOB = 1
9+
ALA = 0
10+
def ula(G, s, t):
11+
n = len(G)
12+
d = [[float('inf'), float('inf')] for _ in range(n)]
13+
Q = PriorityQueue()
14+
d[s][0] = d[s][1] = 0
15+
Q.put((0, s, 0))
16+
Q.put((0, s, 1))
17+
18+
# bob jechal = 1
19+
# ala jechala = 0
20+
# prev = x oznacza ze do v dojechal x
21+
def relax(u, v, cost, prev):
22+
if prev == BOB:
23+
if d[v][ALA] > d[u][BOB] + cost:
24+
d[v][ALA] = d[u][BOB] + cost
25+
Q.put((d[v][ALA], v, ALA))
26+
else: #if prev == ALA:
27+
if d[v][BOB] > d[u][ALA]:
28+
d[v][BOB] = d[u][ALA]
29+
Q.put((d[v][BOB], v, BOB))
30+
31+
while not Q.empty():
32+
weight, u, prev = Q.get()
33+
34+
for cost, v in G[u]:
35+
relax(u, v, cost, prev)
36+
37+
print(*d, sep='\n')
38+
39+
G = [[[10,1],[50,3],[200,6]],
40+
[[10,0],[10,3]],
41+
[[10,3],[30,4]],
42+
[[10,1],[50,0],[10,2]],
43+
[[30,2],[40,5]],
44+
[[200,6],[40,4]],
45+
[[200,5],[200,0]]]
46+
47+
print(ula(G, 0, 5))

0 commit comments

Comments
 (0)