• 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
    一道又一道,好高兴!
  • 相关阅读:
    MFC下使用Mysql
    Curl的移植编译以及注意事项
    MFC 封装类为静态链接库
    MFC 任务托盘显示气泡
    MFC 获取本机IP、网络ip和物理地址
    MFC下获取系统内存和当前进程的内存使用情况
    C++ windows客户端支持SSL双向认证
    jdk+tomcat+mysql一键安装脚本
    mysql修改数据库密码
    MFC 任务托盘经常消失问题
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3543635.html
Copyright © 2020-2023  润新知