zoukankan      html  css  js  c++  java
  • 最短路径问题 HDU3790 (dijkstra)

    基础的dijkstra问题  加上了花费 

    #include<bits/stdc++.h>
    using namespace std;
    
    int m1[1005][1005][2];
    int vis[1005];int dis[1005];
    #define INF 99999
    int n,e,cas;
    int m;
    int cos1[1000];
    
    
    void dijkstra(int v0)
    {
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;i++){dis[i]=(i==v0?0:INF);cos1[i]=(i==v0?0:INF);}
    
    
        vis[v0]=1;
        for(int i=0;i<n-1;i++)
        {
            int minn=INF,u=v0;
            for(int j=1;j<=n;j++)
            {
                if(vis[j]==0&&dis[j]<minn)
                {
                    u=j;minn=dis[j];
    
                }
    
            }
            vis[u]=1;
            for(int j=1;j<=n;j++)
            {
                if(dis[u]+m1[u][j][0]<dis[j])
                {
                    dis[j]=dis[u]+m1[u][j][0];
                    cos1[j]=cos1[u]+m1[u][j][1];
                }
                else if(dis[u]+m1[u][j][0]==dis[j]&&cos1[u]+m1[u][j][1]<cos1[j])
                {
    
                    cos1[j]=cos1[u]+m1[u][j][1];
                }
            }
    
        }
    
    
    
    }
    
    
    
    
    int main()
    {
       while(scanf("%d%d",&n,&m)==2&&(n+m) )
       {
           for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
           {
               if(i==j)m1[i][j][0]=m1[i][j][1]=0;
               else m1[i][j][0]=m1[i][j][1]=INF;
           }
           while(m--)
           {
               int a,b,c,d;
               scanf("%d%d%d%d",&a,&b,&c,&d);
               if( m1[a][b][0]>c )
               {
                   m1[a][b][0]=m1[b][a][0]=c;
                   m1[a][b][1]=m1[b][a][1]=d;
    
               }
               else if(m1[a][b][0]==c&&d<m1[a][b][1])
               {
                   m1[a][b][1]=m1[b][a][1]=d;
    
               }
    
    
           }
           int s,e;
           scanf("%d%d",&s,&e);
           dijkstra(s);
           printf("%d %d
    ",dis[e],cos1[e]);
    
    
    
    
    
    
    
       }
    
    
    
    
    
    
    
    
    }
    View Code

    回顾:

    #include<iostream>
    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    using namespace std;
    
    #define N 1005
    #define inf 0x3f3f3f3f
    
    int n,e,m,s;
    int vis[N],dis[N],mp[N][N];
    int cost[N][N],cos[N];
    
    void dijkstra(int s)
    {
        memset(vis,0,sizeof vis);
        for(int i=1;i<=n;i++)
            dis[i]=inf;
        dis[s]=0;
        for(int i=1;i<=n;i++)
            cos[i]=inf;
        cos[s]=0;
        for(int i=1;i<=n;i++)
        {
            int minn=inf,u=-1;
            for(int j=1;j<=n;j++)
                if(dis[j]<minn&&!vis[j])
                   {
                       minn=dis[j];u=j;
                   }
            if(u==-1)return ;
            vis[u]=1;
            for(int j=1;j<=n;j++)
            {
                 if(dis[j]>dis[u]+mp[u][j])
                 {
                     dis[j]=dis[u]+mp[u][j];
                     cos[j]=cos[u]+cost[u][j];
                 }
                 else if(dis[j]==dis[u]+mp[u][j])
                 {
                     cos[j]=min(cos[j],cos[u]+cost[u][j]);
                 }
            }
        }
    }
    int main()
    {   
        while(scanf("%d%d",&n,&m)==2&&(n+m))
        {
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
            {
                if(i==j)mp[i][i]=0;
                else mp[i][j]=inf;
                if(i==j)cost[i][i]=0;
                else cost[i][j]=inf;
            }
            while(m--)
            {
                int a,b,c,d;
                scanf("%d%d%d%d",&a,&b,&c,&d);
                if(mp[a][b]>c)
                    mp[a][b]=mp[b][a]=c,cost[a][b]=cost[b][a]=d;
            }
            scanf("%d%d",&s,&e);
            dijkstra(s);
            printf("%d %d
    ",dis[e],cos[e]);
        }
        return 0;
    }
  • 相关阅读:
    java安全——BASE64
    Spring Aop 梳理
    Spring Aop中,获取被代理类的工具
    关于eclipse运行TestNG出现: CreateProcess error=206, ÎļþÃû»ò)չÃû的解决办法
    java内存设置
    用python开发调试器——起始篇
    5分钟破解全峰快递
    重拾黑客
    ThreadPoolExecutor的运转机制
    20190627_解决ADB的device offline问题的两种方法
  • 原文地址:https://www.cnblogs.com/bxd123/p/10329791.html
Copyright © 2011-2022 走看看