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

    最短路

    Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 1   Accepted Submission(s) : 1
    Problem Description
    在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?

     
    Input
    输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员需要C分钟的时间走过这条路。
    输入保证至少存在1条商店到赛场的路线。
     
    Output
    对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
     
    Sample Input
    2 1
    1 2 3
    3 3
    1 2 5
    2 3 5
    3 1 2
    0 0
     
    Sample Output
    3
    2
     
    思路:图的最短路径问题,Dijkstra算法,和Prime算法类似
     
    AC代码:
     1 #include<stdio.h>
     2 #include<string.h>
     3 int map[101][101],dist[101];
     4 int vis[101];
     5 void init1(int n)
     6 {
     7     int i,j;
     8     for(i = 1;i <= n;i ++)
     9     {
    10         for(j = 1;j <= n;j ++)
    11         {
    12             map[i][j] = 1 << 30;
    13         }
    14     }
    15     return ;
    16 }
    17 
    18 void init2(int n)
    19 {
    20     int i;
    21     memset(vis,0,sizeof(vis));
    22     for(i = 1;i <= n;i ++)
    23       dist[i] = map[1][i];
    24     return ;
    25 }
    26 
    27 int main()
    28 {
    29     int n,m,i,j,k;
    30     int a,b,w,min,sum;
    31     while(~scanf("%d%d",&n,&m) && (m+n))
    32     {
    33         init1(n);
    34         while(m--)
    35         {
    36             scanf("%d%d%d",&a,&b,&w);
    37             map[b][a] = map[a][b] = w;
    38         }
    39         init2(n);
    40         vis[1] = 1;
    41         for(i = 1;i <= n;i ++)
    42         {
    43             min = 1 << 30;
    44             for(j = 1;j <= n;j ++)
    45             {
    46                 if(!vis[j] && min > dist[j])
    47                 {
    48                     min = dist[j];
    49                     k = j;
    50                 }
    51             }
    52             vis[k] = 1;
    53             for(j = 1;j <= n;j ++)
    54             {
    55                 if(!vis[j] && dist[j] > dist[k]+map[k][j])
    56                   dist[j] = dist[k]+map[k][j];
    57             }
    58         }
    59         printf("%d
    ",dist[n]);
    60     }
    61     return  0;
    62 }
  • 相关阅读:
    安卓给DatePicker设置选择日期后的监听
    Linux端口相关一些命令
    安卓使用Zxing创建二维码
    vue中this.$router.push()路由跳转和传参
    C# 获取请求头中包含指定元素的值
    各种JSON格式数据
    SQL 中 char、nchar、varchar、nvarchar 的区别
    vue中表单修饰符
    vue 中的export 、 export default 和 new Vue({})
    String or binary data would be truncated.
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3391254.html
Copyright © 2011-2022 走看看