mirror of
https://github.com/iritmaximus/tira.git
synced 2026-10-12 19:13:47 +03:00
44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
import time
|
|
import random
|
|
|
|
|
|
class BellmanFord:
|
|
def __init__(self, nodes):
|
|
self.nodes = nodes
|
|
self.edges = []
|
|
|
|
def add_edge(self, node_a, node_b, weight):
|
|
self.edges.append((node_a, node_b, weight))
|
|
|
|
def find_distances(self, start_node):
|
|
distances = {}
|
|
for node in self.nodes:
|
|
distances[node] = float("inf")
|
|
distances[start_node] = 0
|
|
|
|
num_rounds = len(self.nodes) - 1
|
|
for _ in range(num_rounds):
|
|
for edge in self.edges:
|
|
node_a, node_b, weight = edge
|
|
new_distance = distances[node_a] + weight
|
|
if new_distance < distances[node_b]:
|
|
distances[node_b] = new_distance
|
|
|
|
return distances
|
|
|
|
|
|
if __name__ == "__main__":
|
|
start = time.time()
|
|
ls = [x for x in range(1, 5000 + 1)]
|
|
random.shuffle(ls)
|
|
bf = BellmanFord(ls)
|
|
for i in range(1, 5000 + 1):
|
|
for j in range(1, i):
|
|
if i - j < 10:
|
|
bf.add_edge(j, i, random.randint(1, 1000))
|
|
|
|
distances = bf.find_distances(1)
|
|
end = time.time()
|
|
|
|
print(f"Time: {end - start:.2f}s")
|