#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;
}