#include <stdio.h> #define N 6 #define M 1<<10 typedef struct { int pi[N]; int end; }pathtype; int main() { int array[N][N] ={ // v0 v1 v2 v3 v4 v5 /*v0*/ { 0, 20, 15, M, M, M}, /*v1*/ { 2, 0, 4, M, 10, 30}, /*v2*/ { M, M, 0, M, M, 10}, /*v3*/ { M, M, M, 0, M, M}, /*v4*/ { M, M, M, 15, 0, 10}, /*v5*/ { M, M, M, 4, M, 0} }; int i,j,count = 0,s[N] = {0},dist[N]; pathtype path[N]; int min; s[0] = 1; for(i = 0 ;i< N;i++) { dist[i] = array[0][i]; path[i].pi[0] = 0; path[i].end = 0; } while(count < N-1) { for(i = 0 ; i < N; i++) { if(s[i] == 0 && dist[i] < M) { min = i; } } s[min] = 1; path[min].end++; path[min].pi[path[min].end] = min; for(i = 0 ; i < N; i++) { if((s[i]==0 )&&(dist[i] > (dist[min]+array[min][i]))) { dist[i] = dist[min] + array[min][i]; path[i] = path[min]; } } count++; } for(i = 0;i< N;i++) { printf("V0 -> V%d :%d\n",i,dist[i]); for(j = 0;j<=path[i].end;j++) { printf(" path = %d ",path[i].pi[j]); } printf("\n"); } return 0; }