• Codevs 2611 观光旅游


      

     时间限制: 1 s  空间限制: 128000 KB  题目等级:钻石
     
    题目描述 Description

    某旅游区里面有N个景点。两个景点之间可能直接有道路相连,用a[i][j]表示它的长度,否则它们之间没有直接的道路相连。这里所说的道路是没有规定方向的,也就是说,如果从i到j有直接的道路,那么从j到i也有,并且长度与之相等。

    旅游区规定:每个游客的旅游线路只能是一个回路(好霸道的规定)。也就是说,游客可以任取一个景点出发,依次经过若干个景点,最终回到起点。一天,Smart决定到这个景区来旅游,由于他实在已经很累了,于是他决定尽量少走一些路。

    他想请你帮他求出最优的路线。怎么样,不是很难吧?

    输入描述 Input Description

    输入有多组数据。对于每组数据:

    第一行有两个正整数N,M,分别表示景点个数和有多少对景点之间直接有边相连(N≤100,M≤10000);

    接下来M行,每行三个正整数,分别表示一条道路的两端的编号,以及这条道路的长度(长度≤1000)。

    输出描述 Output Description

    对于每组数据,输出一行,如果该回路存在,则输出一个正整数,表示该回路的总长度;否则输出“No solution.”(不要输出引号)

    样例输入 Sample Input

    5 7

    1 4 1

    1 3 300

    3 1 10

    1 2 16

    2 3 100

    2 5 15

    5 3 20

    4 3

    1 2 10

    1 3 20

    1 4 30

    样例输出 Sample Output

    61

    No solution.

    数据范围及提示 Data Size & Hint

    N≤100,M≤10000

    长度≤1000

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #define INF 100000000
     5 using namespace std;
     6 int n,m;
     7 int map[1000][1000],dis[1000][1000];
     8 int main()
     9 {
    10     while((scanf("%d%d",&n,&m))==2)
    11     {
    12         for(int i=1;i<=n;i++)
    13           for(int j=1;j<=n;j++)
    14             map[i][j]=INF,dis[i][j]=INF;
    15         for(int i=1;i<=m;i++)
    16         {
    17             int x,y,z;
    18             cin>>x>>y>>z;
    19             if(map[x][y]>z)
    20               map[x][y]=map[y][x]=z,dis[x][y]=dis[y][x]=z;
    21         }
    22         
    23         int minn=INF;
    24         for(int k=1;k<=n;k++)// Floyed
    25         {
    26             for(int i=1;i<=k-1;i++)
    27               for(int j=i+1;j<=k-1;j++)
    28                 minn=min(minn,dis[i][j]+map[j][k]+map[k][i]);
    29             for(int i=1;i<=n;i++)
    30                 for(int j=1;j<=n;j++)
    31                     if(dis[i][j]>dis[i][k]+dis[k][j])
    32                       dis[i][j]=dis[i][k]+dis[k][j];
    33         }
    34         if(minn!=INF)
    35           printf("%d
    ",minn);
    36         else printf("No solution.
    ");
    37     }
    38     return 0;
    39 }
    View Code

    最小环 ~背模板

  • 相关阅读:
    CSS布局:让页底内容永远固定在底部
    PHP+jQuery实现翻板抽奖
    【数据结构】Java 版本 链表常用操作
    【数据结构】Python3版本 链表常用操作
    Python爬虫学习第一记 (翻译小助手)
    2019年第十届蓝桥杯真题解析JavaC组 A.求和
    2019年第十届蓝桥杯真题解析Java C组 B 矩形切割
    Java 13天基础 06天map集合小练习(黑马程序员) 统计字符串中每个字符出现的次数 (经典面试题)
    2019年第十届蓝桥杯真题解析JavaC组 D: 质数
    Java 9天入门(黑马程序员) 课程收尾 学生管理系统 (9.13)
  • 原文地址:https://www.cnblogs.com/suishiguang/p/5904928.html
Copyright © 2020-2023  润新知