0

我遇到了一个我不知道如何解决涉及 Dijkstra 算法的问题 - 这是我的代码:

infinity = 1000000
invalid_node = -1
#startNode = 0

class Node:
    distFromSource = infinity
    previous = invalid_node
    visited = False

def populateNodeTable():
     nodeTable = []
     f = open("twoDArray.txt", "r")
     for line in f.readlines(): #get number of nodes from file
       nodeTable.append(line.split(','))   # Create matrix of weights

     numNodes = len(nodeTable)            # Count nodes 
     print numNodes
     #for all nodes in text file, set visited to false, distFromSource to infinity & predecessor to none
     **for i in numNodes:
         nodeTable.append(Node(i))**
        #nodeTable.append(Node())

     nodeTable[startNode].distFromSource = 0
     print nodeTable

if __name__ == "__main__":
    populateArray()
    populateNodeTable()

当我运行此代码时,我收到以下错误:

    Traceback (most recent call last):
  File "2dArray.py", line 63, in <module>
    populateNodeTable()
  File "2dArray.py", line 18, in populateNodeTable
    for i in numNodes:
TypeError: 'int' object is not iterable

我不确定如何纠正这个错误(asterix 之间的部分) - 我要做的是读取我的文本文件,它只是一系列用逗号分隔的整数,并计算该文本文件中的节点数然后将为每个节点分配 Node 类中的值

4

3 回答 3

2

试试这个:

for i in nodeTable:

你为什么要迭代numNodes?您刚刚将上面的一行定义为表格的长度。

但是在循环中附加到同一个表没有意义。并且它不能与读取文件的代码一起使用。此外 Node 类根本不可用......

于 2011-02-23T22:02:14.667 回答
0

如果要遍历元素索引,请使用for i, _ in enumerate(nodeTable)

如果您也想访问元素本身,请使用真实姓名而不是_

于 2011-02-23T22:02:28.270 回答
0

怎么样for i in range(numNodes)...... numNodes 只是一个数字,而不是一个数字数组,这就是你所追求的。

于 2011-02-23T22:03:22.883 回答