zoukankan      html  css  js  c++  java
  • 最短路

    目前只学了Dijkstra

    这个贴讲的很详细:

    http://www.wutianqi.com/?p=1890


    HDOJ 2544 最短路

    http://acm.hdu.edu.cn/showproblem.php?pid=2544

    裸的Dij

     1 #include<cstdio>
     2 #define MAXN 105
     3 #define INF 0x3f3f3f3f
     4 #define MIN(a,b) (a<b?a:b)
     5 int n,m,a,b,x;
     6 int map[MAXN][MAXN];
     7 int vis[MAXN];
     8 int dist[MAXN];
     9 void init()
    10 {
    11     for(int i=1;i<=n;i++)
    12     {
    13         for(int j=1;j<=n;j++)
    14         {
    15             if(i==j) map[i][j]=0;
    16             else map[i][j]=INF;
    17         }
    18     }
    19 }
    20 void Dijkstra()
    21 {
    22     for(int i=1;i<=n;i++)
    23     {
    24         dist[i]=map[1][i];
    25         vis[i]=0;
    26     }
    27     vis[1]=1;
    28     int tmp,u=1;
    29     for(int i=1;i<=n;i++)
    30     {
    31         tmp=INF;
    32         for(int j=1;j<=n;j++)
    33         {
    34             if(!vis[j]&&dist[j]<tmp)
    35             {
    36                 tmp=dist[j];
    37                 u=j;
    38             }
    39         }
    40         vis[u]=1;
    41         if(u==n) return;//找到这个点就可以return了,不用找完
    42         for(int j=1;j<=n;j++)
    43         {
    44             if(!vis[j]&&map[u][j]<INF)
    45             {
    46                 dist[j]=MIN(dist[j],dist[u]+map[u][j]);
    47             }
    48         }
    49     }
    50 }
    51 int main()
    52 {
    53     while(scanf("%d%d",&n,&m)!=EOF)
    54     {
    55         if(n==0&&m==0) break;
    56         init();
    57         for(int i=0;i<m;i++)
    58         {
    59             scanf("%d%d%d",&a,&b,&x);
    60             if(map[a][b]>x)
    61             {
    62                 map[a][b]=x;
    63                 map[b][a]=x;
    64             }
    65         }
    66         Dijkstra();
    67         printf("%d
    ",dist[n]);
    68     }
    69     return 0;
    70 }
    View Code

    HDOJ 1874 畅通工程续

    http://acm.hdu.edu.cn/showproblem.php?pid=1874

    水水更健康...

     1 #include<cstdio>
     2 #define MAXN 210
     3 #define INF 0x3f3f3f3f
     4 #define MIN(a,b) (a<b?a:b)
     5 int map[MAXN][MAXN];
     6 int dist[MAXN];
     7 int is_in[MAXN];
     8 int n,m,s,e,a,b,x;
     9 void init()
    10 {
    11     for(int i=0;i<n;i++)
    12     {
    13         for(int j=0;j<n;j++)
    14         {
    15             if(i==j) map[i][j]=0;
    16             else map[i][j]=INF;
    17         }
    18         dist[i]=INF;
    19         is_in[i]=0;
    20     }
    21 }
    22 int Dijkstra()
    23 {
    24     for(int i=0;i<n;i++)
    25     {
    26         if(map[s][i]<INF) dist[i]=map[s][i];
    27     }
    28     is_in[s]=1;
    29     int tmp,u=s;
    30     for(int i=0;i<n;i++)
    31     {
    32         tmp=INF;
    33         //zhaodao zuixiao dianhao
    34         for(int j=0;j<n;j++)
    35         {
    36             if(!is_in[j]&&dist[j]<tmp)
    37             {
    38                 tmp=dist[j];
    39                 u=j;
    40             }
    41         }
    42         is_in[u]=1;
    43         if(u==e) return 1;
    44         for(int j=0;j<n;j++)
    45         {
    46             if(!is_in[j]&&map[u][j]<INF)
    47             {
    48                 dist[j]=MIN(dist[j],dist[u]+map[u][j]);
    49             }
    50         }
    51     }
    52     return 0;
    53 }
    54 int main()
    55 {
    56     while(scanf("%d%d",&n,&m)!=EOF)
    57     {
    58         init();
    59         for(int i=0;i<m;i++)
    60         {
    61             scanf("%d%d%d",&a,&b,&x);
    62             if(x<map[a][b])
    63             {
    64                 map[a][b]=x;
    65                 map[b][a]=x;
    66             }
    67         }
    68         scanf("%d%d",&s,&e);
    69         Dijkstra();
    70         if(dist[e]<INF) printf("%d
    ", dist[e]);
    71         else printf("-1
    ");
    72     }
    73     return 0;
    74 }
    View Code

    持续更新中...

  • 相关阅读:
    金斗云提醒用法说明
    金斗云提醒软件的原理
    缓存雪崩问题,缓存击穿问题,缓存一致性问题(内存+数据库)
    Spring的ApplicationEvent实现
    区块链技术--区块链的生成和链接
    区块链技术--比特币交易的锁定和解锁
    区块链技术--密码学
    区块链技术--比特币
    jedis中scan的实现
    KafkaManager对offset的两种管理方式
  • 原文地址:https://www.cnblogs.com/grubbyskyer/p/3915038.html
Copyright © 2011-2022 走看看