来源:HDU1544
dijstra
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF = 0xfffffff;
const int MAXN = 10010;
int mp[MAXN][MAXN];
int dist[MAXN];
int n,m;
bool vis[MAXN];
void dijstra(){
int dv,dm;
int i,j;
memset(vis,0,sizeof(vis));
for(i=1;i<=n;++i){
dist[i]=mp[1][i];
}
vis[1]=1;
for(i=1;i<n;++i){
dm=INF;
for(j=1;j<=n;++j){
if(!vis[j]&&dm>dist[j]){
dm=dist[j];
dv=j;
}
}
vis[dv]=1;
for(j=1;j<=n;++j){
if(!vis[j]&&dist[j]>dm+mp[dv][j]){
dist[j]=dm+mp[dv][j];
}
}
}
}
int main(){
int a,b,c;
while(scanf("%d%d",&n,&m)!=EOF,n||m){//这个地方改成if(n==0&&m==0) break;就会错,我也是醉了。。。
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
mp[i][j]=mp[j][i]=INF;
}
}
for(int i=0;i<m;i++){
scanf("%d%d%d",&a,&b,&c);
mp[a][b]=mp[b][a]=c;
}
dijstra();
printf("%d\n",dist[n]);
}
return 0;
}