llllmz

导航

畅通工程续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;
}

结果:

posted on 2024-02-18 17:15  神奇的萝卜丝  阅读(10)  评论(0)    收藏  举报