-
题目:
在n个城市组成一个有向公路网,使用邻接矩阵表示修建公路的代价。写出一个算法:求出从某一指定城市V到所有其他城市的路径之和的“最短路径” -
代码
#define SIZE 100
#define INF 100000
int map[SIZE][SIZE];
int len[SIZE];
bool visit[SIZE];
int n, m;
int dijstra(int from,int to) {
int i,j;
for ( i = 0; i <= n; i++){
visit[i] = false;
len[i] = map[from][i]; //源点到其他点的距离
}
for (i = 1; i < n; i++) {//对除源点的其他点计算
int min = INF; //记录最小的len[i]
int pos;
for (j = 1; j <= n; j++) { //找到最小的那个中间节点
if (!visit[j] && min > len[j]) {
pos = j;
min = len[j];
}
}
visit[pos] = true;
for (j=1 ; j <= n; j++){
/*
没有被访问&&
结点到源节点的最短路径>pos结点到源节点的最短路径+pos结点到j结点的路径
更新加入中间结点pos后各个结点的路径
*/
if (!visit[j] && (len[j] > (len[pos] + map[pos][j]))) {
len[j] = len[pos] + map[pos][j];
}
}
}
return len[to];
}