• 2016HUAS_ACM暑假集训3C


    单源最短路径,首先想到的是Dijkstra。Dijkstra算法的思路就不啰嗦了,概括起来就是时刻保持当前节点到目标节点的距离最短。

    题目大意(不进行翻译解释了,就抽离为图来表达):有N个顶点和T条边的无向图,求从1号顶点到N号顶点的最短距离是多少。

    Sample Input:(先T后N!先T后N!先T后N!

    5 5

    1 2 20                //分别是两个顶点v1、v2,以及它们之间的权值 

    2 3 30

    3 4 20

    4 5 20

    1 5 100

    Sample Output:

    90

    由于比较简单,所以也不需要太多注释。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #define size 1001
     5 #define INF 0x3f3f3f3f
     6 using namespace std;
     7 int N,T,a,b,c,i,j,k;
     8 int land[size][size],dis[size],flag[size];
     9 
    10 int min(int a,int b)//树的维护那里可以用判断语句,也可以用这个来选出较小的那个
    11 {
    12     return ((a)<(b))?(a):(b);
    13 }
    14 
    15 void init()//初始化
    16 {
    17     memset(land,INF,sizeof(land));
    18     memset(dis,INF,sizeof(dis));
    19     memset(flag,0,sizeof(flag));
    20 }
    21 
    22 void Dijkstra()
    23 {
    24     dis[1]=0;
    25     for(i=1;i<N;i++)//遍历
    26     {
    27         int M=INF,X;
    28         for(j=1;j<=N;j++)
    29         {
    30             if(!flag[j]&&dis[j]<M)
    31             {
    32                 M=dis[j];
    33                 X=j;
    34             }
    35         }
    36         flag[X]=1;//标记
    37         for(k=1;k<=N;k++)//维护
    38             dis[k]=min(dis[k],dis[X]+land[X][k]);
    39     }
    40     cout<<dis[N]<<endl;
    41 }
    42 
    43 int main()
    44 {
    45     while(cin>>T>>N)
    46     {
    47         init();
    48         while(T--)
    49         {
    50             cin>>a>>b>>c;
    51             if(land[a][b]>c)//只记录最短的
    52                 land[a][b]=land[b][a]=c;
    53         }
    54         Dijkstra();
    55     }
    56     return 0;
    57 }
    View Code
  • 相关阅读:
    动态可配置表单的设计构思
    mysql之视图
    mysql学习之数据备份和恢复
    mysqli操作
    mysql登录出现1045错误修改方法
    mysql之简单的多表查询
    sql优化的方法总结
    mysql语句操作
    linux 批量替换文件内容
    zend framework 数据库操作(DB操作)总结
  • 原文地址:https://www.cnblogs.com/ankelen/p/5723044.html
Copyright © 2020-2023  润新知