#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
const int inf=1e7,num=10;
int to[100*num],be[100],ne[100*num],w[100],d[100],p[100],e;
void add(int x,int y,int c){
to[++e]=y;
ne[e]=be[x];
be[x]=e;
w[e]=c;
}
int main(){
int i,j,k,m,n,x,y,w;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&w);
add(x,y,w);
add(y,x,w);
}
for(i=1;i<=n;i++){p[i]=0;d[i]=inf;}
d[1]=1;
for(i=1;i<=n;i++){
int tmp=inf;
for(j=be[i];j;j=ne[j]){
int v=to[j];
if(!p[v] && d[v]<tmp){
k=v;
tmp=d[v];
}
p[v]=1;
for(j=be[v];j;j=ne[j]){
int v=to[j];
if(!p[v] && d[v]>d[k]+w[j])
d[v]=d[k]+w[j];
}
}
return 0;
}
这仅仅是一个模板:
手打一遍,没有数据;可能有误,只看思想