zoukankan      html  css  js  c++  java
  • 案例6-1.5 旅游规划 (25分)-dijkstra算法

     解题思路:采用dijkstra算法

    #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;
    }
  • 相关阅读:
    Android的startActivityForResult()与onActivityResult()与setResult()参数分析,activity带参数的返回
    git stash 保存当前工作状态
    vim diff 的使用
    git pull 命令
    java 开发环境安装
    vim 处理换行符
    git 操作分支
    git 操作远程仓库地址
    vim 宏的使用
    Chrome 调试技巧
  • 原文地址:https://www.cnblogs.com/snzhong/p/12512856.html
Copyright © 2011-2022 走看看