-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_parser_main.py
61 lines (46 loc) · 2.04 KB
/
test_parser_main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
from input_parser.parser import Parser
import heapq
def main():
file_path = "input_file.txt"
parsed_data = Parser.parse_file(file_path)
# Esempio di rappresentazione di un grafo ponderato
# Dove ogni chiave è un nodo e ogni valore è una lista di tuple (nodo_destinazione, costo, silver_point)
grafo = {
'A': [('B', 2, 1), ('C', 3, 2)],
'B': [('D', 1, 3)],
'C': [('D', 4, 2), ('E', 5, 1)],
'D': [('F', 2, 4)],
'E': [('F', 1, 1)],
'F': [] # Nodo finale
}
def dijkstra_modificato(grafo, nodo_inizio, nodo_fine):
# Coda di priorità
coda = [(0, 0, nodo_inizio, [])] # (costo totale, silver_point totale, nodo attuale, percorso)
visitati = set()
while coda:
cost, sp, node, path = heapq.heappop(coda)
# Aggiorna il percorso
path = path + [node]
# Se il nodo è già stato visitato, raddoppia i valori
if node in visitati:
cost *= 2
sp *= 2
else:
visitati.add(node)
# Se abbiamo raggiunto il nodo finale
if node == nodo_fine:
return cost, sp, path
# Esplora i nodi vicini
for next_node, weight, silver_point in grafo.get(node, []):
if next_node not in visitati or True: # Semplificazione, normalmente qui andrebbe la logica per gestire la revisita
nuovo_costo = cost + weight
nuovo_sp = sp + silver_point
heapq.heappush(coda, (nuovo_costo, nuovo_sp, next_node, path))
return float("inf"), 0, []
# Assumi 'A' come nodo inizio e 'F' come nodo fine
costo_minimo, silver_points_totali, percorso = dijkstra_modificato(grafo, 'A', 'F')
print(f"Costo Minimo: {costo_minimo}, Silver Points Totali: {silver_points_totali}, Percorso: {' -> '.join(percorso)}")
Parser.generate_output("output_file.json")
print(parsed_data)
if __name__ == "__main__":
main()