Case 6-1.5 travel planning (25 points) -dijkstra algorithm

 

 Problem-solving ideas: using dijkstra algorithm

#include <stdio.h>
#include <malloc.h>
#define ERROR -1
#define MaxVex 500+1
#include <string.h>
#define INF 0x3f3f3f3f
int Map[MaxVex][MaxVex];
int cost[MaxVex][MaxVex];
int Nv,Ne;
int visit[MaxVex]= {0};
int dist[MaxVex];
int Mcost[MaxVex];
void Init() {
    memset(Map,INF,sizeof(Map));
    memset(cost,0,sizeof(cost));
    int i;
    int v1,v2,p,c;
    for(i=0; i<Ne; i++) {
        scanf("%d %d %d %d",&v1,&v2,&p,&c);
        Map[v1][v2]=p;
        Map[v2][v1]=Map[v1][v2];
        cost[v1][v2]=c;
        cost[v2][v1]=cost[v1][v2];
    }
}
void ShortPath(int s,int d) {
    visit[s]=1;
    int i,j,w;
    for(j=0; j<Nv; j++) {
        int MIN=INF;
        for(i=0; i<=d; i++) {
            if(!visit[i]) {
                if(dist[i]<MIN) {
                    MIN=dist[i];
                    w=i;
                }
            }
        }
        visit[w]=1;
        for(i=0; i<=d; i++) {
            if(!visit[i]) {
                if(MIN+Map[w][i]<dist[i]) {
                    dist[i]=MIN+Map[w][i];
                    Mcost[i]=Mcost[w]+cost[w][i];
                } else if(MIN+Map[w][i]==dist[i]) {
                    if(Mcost[i]>Mcost[w]+cost[w][i]) {
                        Mcost[i]=Mcost[w]+cost[w][i];
                    }
                }
            }
        }
    }
}
int main() {
    int s,d;
    scanf("%d %d %d %d",&Nv,&Ne,&s,&d);
    int i;
    for(i=0; i<Nv; i++) {
        visit[i]=0;
    }
    Init();
    for(i=0; i<Nv; i++) {
        dist[i]=Map[s][i];
        Mcost[i]=cost[s][i];
    }
    ShortPath(s,d);
    printf("%d %d",dist[d],Mcost[d]);
    return 0;
}

 

Guess you like

Origin www.cnblogs.com/snzhong/p/12512856.html