0

私はPythonの初心者であり、しばらくの間この問題に直面しています。問題を修正するための提案は価値があります。以下は、ダイクストラのアルゴリズムを使用して最短経路を見つけるために使用されるコードです。コストマトリックスとソースを入力として持っています。

def dijkstra(cost_matrix,source):
    n = 20
    dist = [0 for row in range(20)]
    visited = [0 for row in range(20)]
    for j in range(20):
        visited[j] = "False"
    visited[source] = "True"
    for i in range(20):
        dist[i] = cost_matrix[source][i]
    prev_min = source
    for k in range(20):
        minimum = min(dist)
        minimum2 = min(minimum,n)
        for i in range(20):
            if dist[i] > (cost_matrix[prev_min][minimum2] + cost_matrix[minimum2][i]):
                dist[i] = cost_matrix[prev_min][minimum2] + cost_matrix[minimum2][i]
        visited[minimum2] = "True"
        prev_min = minimum2
    return dist  

cost_matrixを計算するコード

def matrix():
    k = 30
    b_ij = [[0 for row in range(20)] for col in range(20)]
    a_ij = [[0 for row in range(20)] for col in range(20)]
    cost_matrix = [[0 for row in range(20)] for col in range(20)]
    for i in range(20):
        for j in range(20):
            rand = random.randint(0,8)
            b_ij[i][j] = rand
            b_ij[j][i] = rand
    while(k > 0):
        rand1 = random.randint(0,19)
        rand2 = random.randint(0,19)
        a_ij[rand1][rand2] = 200
        a_ij[rand2][rand1] = 200
        k = k - 1
    for i in range(20):
        for j in range(20):
            if a_ij[i][j] != 200:
                rand = random.randint(0,8)
                a_ij[i][j] = rand
                a_ij[j][i] = rand
    for i in range(len(a_ij)):
        for j in range(len(b_ij[0])):
            for k in range(len(b_ij)):
                cost_matrix[i][j] += a_ij[i][k] * b_ij [k][j]

エラーメッセージ:

Traceback (most recent call last):
  File "ass1.py", line 60, in <module>
    print(dijkstra(cost_matrix, 1))
  File "ass1.py", line 45, in dijkstra
    dist[i] = cost_matrix[source][i]
TypeError: 'NoneType' object is not subscriptable
4

2 に答える 2

2

を作成する実際のコードはまだ投稿されていませんcost_matrix行列関数のコードを投稿しましたが、行列関数を使用するコードは投稿していません。

ただし、問題はmatrix関数が何も返さないことのようです。マトリックスを作成して破棄するだけです。return cost_matrixその関数の最後に追加する必要があります。

于 2012-10-13T05:31:04.813 に答える
0

cost_matrix または cost_matrix[source] の値は None ですが、リストである必要があります。

行の直前に両方を印刷します。

dist[i] = cost_matrix[source][i]

問題が何であるかを調べるために。

ちなみに、この種のものにはおそらく numpy を使用する必要があります。

于 2012-10-13T06:30:40.957 に答える