dijkstra 最短路算法模板(以HDU - 2544 为例)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = 105;
const int INF = 0x3f3f3f3f;
int map[MAXN][MAXN];
int N,M;
int dis[MAXN];
bool vis[MAXN];
void init(int N){
for(int i = 1; i <= N; i++){
for(int j = 1; j <= N; j++){
if(i==j){
map[i][j] = 0;
}else{
map[i][j] = INF;
}
}
}
}
void dij(int start){
memset(dis,INF,sizeof(dis));
memset(vis,false,sizeof(vis));
dis[start] = 0;
for(int i = 1; i <= N; i++){
int mind = INF,u = -1;
for(int j = 1; j <= N; j++){
if(!vis[j]&&dis[j]<mind){
u = j;
mind = dis[j];
}
}
vis[u] = true;
for(int j = 1; j <= N; j++){
if(dis[u]+map[u][j]<dis[j]){
dis[j] = dis[u]+map[u][j];
}
}
}
}
int main(){
while(~scanf("%d%d",&N,&M)&&(N+M)!=0){
init(N);
int x,y,v;
for(int i = 1; i <= M; i++){
scanf("%d %d %d",&x,&y,&v);
map[x][y] = (map[x][y] < v) ? map[x][y]:v;
map[y][x] = (map[y][x] < v) ? map[y][x]:v;
}
dij(1);
cout<<dis[N]<<endl;
}
return 0;
}