Tehtäväsi on rakentaa suunnattu verkko, jonka solmut ovat ja jossa kurssimateriaalin algoritmi muodostaa tasan täydennyspolkua, kun lasketaan maksimivirtaus solmusta solmuun .
Saat päättää itse, montako kaarta verkossa on. Jokaisen kaaren painon tulee olla positiivinen kokonaisluku. Verkossa ei saa olla kahta kaarta, joissa on sama lähtösolmu ja sama kohdesolmu. Lisäksi verkossa ei saa olla kaarta, jonka lähtösolmu ja kohdesolmu on sama.
Toteuta tiedostoon augmenting.py
funktio create_edges
, joka muodostaa halutunlaisen verkon. Funktion tulee palauttaa listana verkon kaaret.
Esimerkiksi lista [(1, 2, 5), (1, 3, 1)]
tarkoittaisi, että verkossa on kaksi kaarta. Ensimmäinen kaari kulkee solmusta solmuun ja sen paino on . Toinen kaari kulkee solmusta solmuun ja sen paino on .
Voit muodostaa minkä tahansa verkon, jolla on halutut ominaisuudet. Funktiota testataan parametreilla .
# hieman muutettu versio kurssimateriaalin luokasta class MaximumFlow: # ... def construct(self, source, sink): self.flow = self.graph.copy() total = 0 self.path_count = 0 while True: self.seen = set() add = self.add_flow(source, sink, float("inf")) if add == 0: break total += add self.path_count += 1 return total def create_edges(x): # TODO if __name__ == "__main__": edges = create_edges(42) maximum_flow = MaximumFlow(range(1, 100 + 1)) for edge in edges: maximum_flow.add_edge(edge[0], edge[1], edge[2]) maximum_flow.construct(1, 100) print(maximum_flow.path_count) # 42