Дейкстра на матрице смежности в C - PullRequest
0 голосов
/ 15 сентября 2010

Мне нужна помощь с алгоритмом Дейкстры в C.

Я сгенерировал матрицу смежности, которая выглядит примерно так:

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

Я нашел эту реализацию: http://www.answers.com/topic/dijkstra-s-algorithm-1, но путь - это одномерный массив, а моя матрица - это двумерный массив.

Есть ли способ преобразовать одно в другое? Или, может быть, у кого-то есть метод для работы с такого рода матрицей.

Заранее благодарен за любую помощь

Ответы [ 2 ]

0 голосов
/ 15 сентября 2010

Если вы передадите 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) запускает программу выше без жалоб: -)

0 голосов
/ 15 сентября 2010

В указанной вами ссылке, path - это массив, в который записывается вывод алгоритма.Матрица смежности в этом примере, по-видимому, представляет собой массив dist 2D.

...