您的位置:首页 > 其它

最短路径Dijkstra c实现

2011-04-01 22:28 204 查看
Code:

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");

}



}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐