zoukankan      html  css  js  c++  java
  • HDOJ 3790

    dijstra最短路径算法

    9885560 2013-12-23 23:54:56 Accepted 3790 203MS 8112K 1343 B C++ 泽泽
     1 #include<cstdio>
     2 #include<cstring>
     3 #define inf 0xffffff
     4 int g[1001][1001];
     5 int v[1001][1001];
     6 void dijstra(int n,int a)
     7 {
     8     int used[1001],i,j,k,min,dis[1001],lowcost[1001];
     9     memset(used,0,sizeof(used));
    10     for(i=1;i<=n;i++)
    11     {
    12         dis[i]=g[i][a];
    13         lowcost[i]=v[i][a];
    14     }
    15     used[a]=1;
    16     for(i=1;i<=n;i++)
    17     {
    18         j=a;min=inf;
    19         for(k=1;k<=n;k++)
    20         {
    21             if(dis[k]<min&&!used[k])
    22                 min=dis[k],
    23                 j=k;
    24         }
    25         used[j]=1;
    26         for(k=1;k<=n;k++)
    27         {
    28             if(g[k][j]+dis[j]<dis[k]&&!used[k])
    29             {
    30                 g[a][k]=g[k][a]=dis[k]=g[k][j]+dis[j];
    31                 lowcost[k]=v[a][k]=v[k][a]=v[k][j]+v[j][a];
    32             }
    33             if(g[k][j]+dis[j]==dis[k]&&!used[k])
    34             {
    35                 if(v[k][j]+lowcost[j]<lowcost[k])
    36                 {
    37                     lowcost[k]=v[k][a]=v[k][j]+v[j][a];                    
    38                 }
    39                 
    40             }
    41         }
    42     }
    43     
    44 }
    45 int main()
    46 {
    47     int n,m,i,j,a,b,s,vi;
    48     while(scanf("%d %d",&n,&m)!=EOF)
    49     {
    50         if(!n&&!m)break;
    51         for(i=1;i<=n;i++)
    52         {
    53             for(j=1;j<=n;j++)
    54             {
    55                 g[i][j]=inf,v[i][j]=inf;
    56             }
    57             g[i][i]=0;
    58         }
    59         for(i=1;i<=m;i++)
    60         {
    61             scanf("%d %d %d %d",&a,&b,&s,&vi);
    62             if(s<g[a][b])
    
    63             {
    64                 g[a][b]=g[b][a]=s;
    65                 v[a][b]=v[b][a]=vi;
    66             }
    67             if(s==g[a][b]&&vi<v[a][b])
    68             {
    69                 v[a][b]=v[b][a]=vi;
    70             }
    71         }
    72         int start,end;
    73         scanf("%d %d",&start,&end);
    74         dijstra(n,start);
    75         printf("%d %d
    ",g[start][end],v[start][end]);
    76     }
    77     return 0;
    78 }
    View Code
  • 相关阅读:
    基于FPGA的ARP协议实现
    Modelsim 仿真错误集锦
    基于FPGA的IIC驱动设计
    状态机跑飞的解决办法
    基于FPGA的检测时钟脉冲的高电平及低电平的中点标志位设计
    基于FPGA的UART实现
    基于FPGA的数字秒表设计
    Matlab的常用调试方法
    基于FPGA的花样流水灯
    **time_limited.sof文件
  • 原文地址:https://www.cnblogs.com/zeze/p/hdoj3790.html
Copyright © 2011-2022 走看看