-
Notifications
You must be signed in to change notification settings - Fork 2
/
tools.py
75 lines (58 loc) · 2.57 KB
/
tools.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import sys
import colorama
def getCompletePath(p):
complete_path = list(p['path'])
if p['parent'] != None:
dev_node = p['dev_node']
while p['parent'] != None:
parent = p['parent']
stop_index = parent['path'].index(dev_node)
parent_path = list(parent['path'][:stop_index])
complete_path = parent_path + complete_path
dev_node = parent['dev_node']
p = parent
stop_index = p['path'].index(dev_node)
final_path = list(p['path'][:stop_index])
complete_path = final_path + complete_path
return complete_path
def printPaths(paths):
k = 0
for p in paths:
k += 1
cost = p['cost']
complete_path = getCompletePath(p)
complete_path = [str(el+1)for el in complete_path]
line = str(k) + ') Costo: ' + str(cost) + '\t\t\tCammino: ' + '->'.join(complete_path)
print(line)
def getGraphStructure(file_name):
if file_name.find('/') == -1: #Vado a cercare il file nella cartella test, quindi se la cartella non è indicata
directory = 'test/' # gliela aggiungo
file_name = directory + file_name
try:
graph_file = open(file_name, 'rt')
except Exception as ex:
sys.exit(ex)
#################
#Apro il file per la creazione del grafo
graph_imm_name = 'test/graph/grafo'
graph_imm = open(graph_imm_name + '.gv', 'wt')
graph_imm.write('digraph {\n')
num_nodes = int(graph_file.readline()) #La prima riga di ogni file contiene il numero dei nodi del grafo
num_arcs = 0
graph_matrix = [[float('inf')]*num_nodes for i in range(num_nodes)]
graph_file.readline() #La seconda riga del file deve essere vuota
for line in graph_file:
num_arcs += 1
head, tail, cost = line.split(' ')
line = head + '->' + tail + ' [label=' + cost.strip() + ']\n' #Creo la riga da scrivere nel file per il grafo
graph_imm.write(line) #scrivo nel file del grafo
head = int(head) - 1 #Decremento perché nella struttura dati i nodi partono da 0
tail = int(tail) - 1
cost = float(cost)
graph_matrix[head][tail] = cost
graph_imm.write('\n}')
graph_imm.close()
graph_file.close()
#for n in range(num_nodes):
# graph_matrix[n] = tuple(graph_matrix[n]) #Creo delle tuple così da essere sicuro di non modificare la struttura dati
return graph_matrix, num_nodes, num_arcs, graph_imm_name