-
Notifications
You must be signed in to change notification settings - Fork 0
/
ResgateEmQuedaLivre.py
41 lines (32 loc) · 1.2 KB
/
ResgateEmQuedaLivre.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
import networkx as nx
import math
'''
Autor: Gabriella Mara
Version: 1.0
'''
#Calcula a distância entre dois pontos
def distAB(xA,yA,xB,yB):
distAB = math.sqrt(((xA-xB)**2) + ((yA-yB)**2))
return distAB
C = int(input()) #Número de casos de teste
for i in range(0,C):
n = int(input()) #Quantidade de pessoas/vértices
g = nx.complete_graph(n) #Gera um Kn
for j in range(0,n):
xj,yj = map(int,input().split()) #Coordenadas (x,y) do vértice (j)
g.node[j]['x'] = xj
g.node[j]['y'] = yj
for j in range(0,n):
for k in range(0,n):
if (((j,k) not in g.edges(data='weight')) & (j != k)):
xA = g.node[j]['x']
yA = g.node[j]['y']
xB = g.node[k]['x']
yB = g.node[k]['y']
g[j][k]['weight'] = distAB(xA,yA,xB,yB) #Cria uma aresta entre os vértices (j,k) com peso igual a distância entre os dois pontos
minTree = nx.minimum_spanning_tree(g,'weight') #Árvore geradora mínima do grafo
minPath = 0.0
#Somar o caminho total da AGM
for x, y, weight in minTree.edges.data('weight'):
minPath += weight
print("%.2f" % (minPath/100))