2011-03-13 5 views
0

Ok, j'ai un peu changé mon code, mais je suis confus sur les noms de variables qui devraient être passés à ma fonction la plus proche. Ces deux fonctions fonctionnent bien:Détermination du plus proche voisin à Dijkstra

infinity = 1000000 
invalid_node = -1 
startNode = 0 

#Values to assign to each node 
class Node: 
    def __init__(self): 
     self.distFromSource = infinity 
     self.previous = invalid_node 
     self.visited = False 

#read in all network nodes 
#node = the distance values between nodes 
def network(): 
    f = open ('network.txt', 'r') 
    theNetwork = [[int(networkNode) for networkNode in line.split(',')] for line in f.readlines()] 
    #theNetwork = [[int(node) for node in line.split(',')] for line in f.readlines()] 
    #print theNetwork 

    return theNetwork 

#for each node assign default values 
#populate table with default values 
def populateNodeTable(): 
    nodeTable = [] 
    index = 0 
    f = open('network.txt', 'r') 
    for line in f: 
     networkNode = map(int, line.split(',')) 
     nodeTable.append(Node()) 

     #print "The previous node is " ,nodeTable[index].previous 
     #print "The distance from source is " ,nodeTable[index].distFromSource 
     #print networkNode 
     index +=1 
    nodeTable[startNode].distFromSource = 0 

    return nodeTable 

Alors, tout va bien. Cependant, ma prochaine fonction est de me donner une erreur, et bien que je change de noms de variables entre parenthèses je ne peux pas résoudre le problème. Voici le code suivant de la fonction et le message d'erreur:

def nearestNeighbour(nodeTable, theNetwork): 
    listOfNeighbours = [] 
    nodeIndex = 0 
    for networkNode in nodeTable[currentNode]: 
      if networkNode != 0 and networkNode.visited == False: 
      listOfNeighbours.append(nearestNode) 
      nodeIndex +=1 
    print listOfNeighbours 
##  #print node.distFromSource, node.previous, node.visited 
## 
    return listOfNeighbours 

for networkNode in nodeTable[currentNode]: 
TypeError: iteration over non-sequence 
+0

"J'ai changé un peu de code" - changé de quoi? S'il s'agit d'une question de suivi, veuillez ajouter le lien à la question précédente afin que tout le monde puisse comprendre le contexte. – MAK

+0

Il semble que je ne puisse pas annuler mon édition pour obtenir mon code précédent. Oui, donc je ne fais aucune incursion sur ma fonctionNeigbour la plus proche et je ne sais pas pourquoi – user612041

Répondre

1

Je pense que vous voulez nodeTable[node], pas node[nodeTable], et de même avec theNetwork[node].

Questions connexes