Lekcja -Algorytm Bellamana Forda

graph = {
    'A': {'B': 2, 'D': 4},
    'B': {'C': 3, 'D': 3},
    'C': {'E': 2, 'D': -2},
    'D': {'C': -1, 'E': 4},
    'E':{}
}

costs = {}
parents = {}
for name in graph.keys():
    costs[name] = float('inf')
    parents[name] = None

start = 'A'
costs[start] = 0

for _ in range(len(graph) - 1):

    there_are_changes = False

    for s in graph.keys():
        for d,w in graph[s].items():
            if costs[s] != float('inf') and costs[s] + w < costs[d]:
                costs[d] = costs[s] + w
                parents[d] = s
                there_are_changes = True

    if not there_are_changes:
        break

# for d,c in costs.items():
#     print(f'The cost for {d} is {c}')

#     current_d = d
#     while parents[current_d]:
#         print(current_d)
#         current_d = parents[current_d]
#     else:
#         print(current_d)

there_are_negative_cycles = False

for s in graph.keys():
    for d,w in graph[s].items():
        if costs[s] != float('inf') and costs[s] + w < costs[d]:
            costs[d] = costs[s] + w
            parents[d] = s
            there_are_negative_cycles = True

if there_are_negative_cycles:
    print('The graph contains negative cycles')
else:
    print('The graph can be processed by Bellman-Ford alorithm')

Lab

graph = {
    'Ciudad Polacca': {'Santo Subito': 15, 'Senderos': 10},
    'Senderos': {'Dos Rios': 20},
    'Santo Subito': {'Dos Rios': 5, 'Al Pacino': 50},
    'Dos Rios': {'Frontera': 20, 'Arboleda': 5},
    'Frontera': {'Al Pacino': 10},
    'Arboleda': {'Al Pacino': 10},
    'Al Pacino': {}
}

costs = {}
parents = {}
for name in graph.keys():
    costs[name] = float('inf')
    parents[name] = None

start = 'Ciudad Polacca'
costs[start] = 0

for _ in range(len(graph) - 1):

    there_are_changes = False

    for s in graph.keys():
        for d,w in graph[s].items():
            if costs[s] != float('inf') and costs[s] + w < costs[d]:
                costs[d] = costs[s] + w
                parents[d] = s
                there_are_changes = True

    if not there_are_changes:
        break

for d,c in costs.items():
    print(f'The cost for {d} is {c}')

    current_d = d
    while parents[current_d]:
        print(current_d)
        current_d = parents[current_d]
    else:
        print(current_d)