0

Cでのダイクストラのアルゴリズムについて助けが必要です。

次のような隣接行列を生成しました。

int mat[NB][NB] =  {{0, 171, MAX, 132, [...]}, {171, 0, 30, 39, [...]}, , [...]};

私はこの実装を見つけました:http ://www.answers.com/topic/dijkstra-s-algorithm-1しかし、パスは1次元配列であり、私のマトリックスは2次元配列です。

あるものを別のものに変換する方法はありますか?あるいは、誰かがこの種の行列を処理する方法を持っているかもしれません。

助けてくれてありがとう

4

2 に答える 2

0

提供したリンクにpathは、アルゴリズムの出力が書き込まれる配列があります。その例の隣接行列は明らかにdist2D配列です。

于 2010-09-15T16:33:10.690 に答える
0

mat[0](およびサイズ)を期待する関数に渡すとint *、その関数は2次元行列を1次元行列として簡単に扱うことができます。

#include <stdio.h>

int foobar(int *arr, int siz) {
    int sum = 0;
    for (int i = 0; i < siz; i++) sum += arr[i];
    return sum;
}

int main(void) {
    int mat[10][10] = {{4, -3, 7}, {5}};
    printf("%d\n", foobar(mat[0], 10*10));
    return 0;
}

編集: ideone(http://ideone.com/2mLi7)は文句なしに上記のプログラムを実行します:-)

于 2010-09-15T17:20:51.507 に答える