Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pandas as pd
- import numpy as np
- import math
- class Node:
- def __init__(self, estacao, direta, real, total):
- self.estacao = estacao
- self.direta = direta
- self.real = real
- self.total = total
- self.next = None
- #Carregando valores. Primeiro, os nos de inicio e fim desejados
- inicioUser = input("estacao de inicio, apenas o numero ") - 1
- estacaoFinal = input("estacao de fim ") - 1
- #Puxa os valores de distancias reais e diretas do excel
- distancias = pd.ExcelFile('/Users/andre/Documents/distancias.xlsx')
- diretas = distancias.parse('diretas')
- reais = distancias.parse('reais')
- #Transforma numa matriz
- reais = reais.values
- diretas = diretas.values
- #Deleta a primeira coluna, porque vem com info desnecessaria
- reais = np.delete(reais, 0, 1)
- diretas = np.delete(diretas, 0, 1)
- node = Node(inicioUser, 0, diretas[inicioUser][estacaoFinal], estacaoFinal)
- listNode = [node]
- listNodeFinal = []
- def aStar(nodeIn):
- global listNode
- global listNodeFinal
- listNodeFinal.append(nodeIn)
- if nodeIn.estacao == estacaoFinal:
- return nodeIn
- else:
- i = 0
- while i < len(reais):
- if not math.isnan(reais[nodeIn.estacao][i]):
- nodeTemp = Node(i, diretas[i][estacaoFinal], reais[nodeIn.estacao][i] + nodeIn.real, diretas[i][estacaoFinal]+ reais[nodeIn.estacao][i] + nodeIn.real)
- listNode.append(nodeTemp)
- nodeTemp.next = nodeIn
- i += 1
- nodeTemp = listNode.pop(0)
- listNode.sort(key = lambda x: x.total)
- return aStar(listNode[0])
- final = aStar(listNode[0])
- while final is not None:
- print(final.estacao + 1)
- final = final.next
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement