- int Pnum;
- int P[MAX_PC] = {0};
- int S[MAX_PC];
- float D[MAX_PC];
- void ShortPath(float C[][MAX_PC], int v)
- {
- int i;
- int j;
- int k;
- int v1;
- int pre;
- int min;
- v1 = v -1;
- // initialize distance value
- for (i=0; i<Pnum; i++)
- {
- D[i] = C[v1][i];
- if (i != v-1)
- P[i] = v;
- }
- // the red set is null
- for (i=0; i<Pnum; i++)
- S[i] = 0;
- S[v1] = 1;
- D[v1] = 0;
- // extend the red set
- for (i=0; i<Pnum - 1; i++)
- {
- min = 1000000;
- // add the shortest distance of node to the red set
- for (j=0; j<Pnum; j++)
- {
- if ( (!S[j]) && (D[j] <min) )
- {
- min = D[j];
- k = j;
- }
- //printf("k")
- }
- // add "k+1" to the red set
- S[k] = 1;
- for (j=0; j<Pnum; j++)
- {
- // Blue distance adjustment
- if ( (!S[j]) && ( D[j] > D[k] + C[k][j] ) )
- {
- D[j] = D[k] + C[k][j];
- P[j] = k + 1;
- }
- }
- }
- for (i=0; i<Pnum; i++)
- {
- printf("%f/n%d", D[i], i+1);
- pre = P[i];
- while (pre != 0)
- {
- printf("<--%d", pre);
- pre = P[pre-1];
- }
- printf("/n");
- }
- }