简述
最短路的Dijkstra代码类似于最小生成树的prim算法。
题目 : http://acm.hdu.edu.cn/showproblem.php?pid=2544
模板代码:
#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 110;
#define MAX 0x3f3f3f3f
int map[maxn][maxn];
int vis[maxn];
int dis[maxn];//从起点到达某点的最短距离
void Dijkstra(int n) {
int minn,now;
for(int i = 1; i <= n; i++) {
dis[i] = map[1][i];
vis[i] = 0;
}
vis[1] = 1;
for(int i = 1; i <= n-1; i++) {
minn = MAX;
for(int j = 1; j <= n; j++) {
if(!vis[j] && dis[j] < minn) {
now = j;
minn = dis[j];
}
}
vis[now] = 1;
for(int j = 1; j <= n; j++) {
if(!vis[j] && dis[now] + map[now][j] < dis[j]) {
dis[j] = dis[now] + map[now][j];
}
}
}
}
int main() {
int n,m,a,b,v;
while(~scanf("%d%d",&n,&m) && (n || m)) {
memset(map,MAX,sizeof(map));
for(int i = 1; i <= m; i++) {
scanf("%d%d%d",&a,&b,&v);
map[a][b] = map[b][a] = v;
}
Dijkstra(n);
printf("%d\n",dis[n]);
}
return 0;
}