畅通工程续C

考迪杰斯特拉算法。
#include<stdio.h>
struct node{
int n1;
int n2;
int weight;
};
typedef struct node edge;
edge e[1000];
void init_dist(int dist[],int n){
for(int i=0;i<200;i++){
dist[i]=10000;
}
}
int findmin(int visit[],int dist[]){
int i=0;
for(;i<200;i++){
if(visit[i]==0) break;
}
int min=dist[i];
for(int j=0;j<200;j++){
if(dist[j]<min && visit[j]==0){
min=dist[j];
i=j;
}
}
return i;
}
int main(){
int n=0,m=0;
while(scanf("%d %d",&n,&m)!=EOF){
int visit[200]={0};
int dist[200];
init_dist(dist,n);
for(int i=0;i<m;i++){
scanf("%d %d %d",&e[i].n1,&e[i].n2,&e[i].weight);
}
int start=0,end=0;
scanf("%d %d",&start,&end);
dist[start]=0;
for(int i=0;i<n;i++){
int nowmin=findmin(visit,dist);
visit[nowmin]=1;
for(int j=0;j<m;j++){
if(e[j].n1==nowmin){
if(dist[nowmin]+e[j].weight<dist[e[j].n2]){
dist[e[j].n2]=dist[nowmin]+e[j].weight;
}
}else if(e[j].n2==nowmin){
if(dist[nowmin]+e[j].weight<dist[e[j].n1]){
dist[e[j].n1]=dist[nowmin]+e[j].weight;
}
}
}
}
if(dist[end]!=10000) {
printf("%d\n",dist[end]);
}else{
printf("-1\n");
}
}
return 0;
}
结果:
浙公网安备 33010602011771号