zoukankan      html  css  js  c++  java
  • hdu 3790 最短路径问题(最短路,Dijsktra)

    题目

    Dijsktra基础题,只是多了一个花费,稍稍变动处理就好

    #define  _CRT_SECURE_NO_WARNINGS
    
    #include<string.h>
    #include<stdio.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    
    const int MAXN=1010;  
    
    #define typec int  
    const typec INF=0x3f3f3f3f;//防止后面溢出,这个不能太大  
    bool vis[MAXN];  
    typec cost[MAXN][MAXN],huafei[MAXN][MAXN];
    typec lowcost[MAXN],qihuafei[MAXN];
    void Dijkstra(int n,int beg)  
    {  
        for(int i=1;i<=n;i++)
        {
            lowcost[i]=cost[beg][i];qihuafei[i]=huafei[beg][i];vis[i]=false;
        }
        for(int i=1;i<=n;i++)
        {
            typec temp=INF;
            int k=-1;
            for(int j=1;j<=n;j++)
            {
                if(!vis[j]&&lowcost[j]<temp)
                {
                    temp=lowcost[j];
                    k=j;
                }
            }
            vis[k]=true;
            for(int l=1;l<=n;l++)
            {
                if(!vis[l])
                {
                    if(lowcost[l]>lowcost[k]+cost[k][l])
                    {
                        lowcost[l]=lowcost[k]+cost[k][l];
                        qihuafei[l]=qihuafei[k]+huafei[k][l];
                    }
                    if(lowcost[l]==lowcost[k]+cost[k][l])
                    {
                        qihuafei[l]=min(qihuafei[l],qihuafei[k]+huafei[k][l]);
                    }
                }
            }
        }
    }
    
    
    int main()
    {
        int n,m,i,j,s,t,a,b,c,d;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            if(n==0&&m==0)break;
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                    huafei[i][j]=cost[i][j]=(i==j)? 0:INF;
            
            for(i=0;i<m;i++)
            {
                scanf("%d%d%d%d",&a,&b,&c,&d);
                if(cost[a][b]>c)
                {
                    cost[a][b]=cost[b][a]=c;
                    huafei[a][b]=huafei[b][a]=d;
                }
            }
            scanf("%d%d",&s,&t);
            Dijkstra(n,s);
            printf("%d %d
    ",lowcost[t],qihuafei[t]);
        }
        
        return 0;
    }
    View Code
    一道又一道,好高兴!
  • 相关阅读:
    微软小娜APP的案例分析
    嵌入式第12次实验
    嵌入式第11次实验
    嵌入式第10次实验报告
    嵌入式第9次实验
    软工 小组作业(第二次)
    嵌入式软件设计第8次实验报告-140201236-沈樟伟
    5月17下
    5月17上
    5月15上午
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3543635.html
Copyright © 2011-2022 走看看