题目传送门

题目中文翻译:

Description

桑给巴尔岛上的阿德尔顿镇有一家旅行社,它已决定为其客户提供除了许多其他名胜之外的景点。为了尽可能地从景点赚取收入,该机构已经接受了一个精明的决定:有必要找到在同一地点开始和结束的最短路线。你的任务是写一个找到这样的路线的程序。

镇内有N个交叉点,编号从1到N。同时有M条双向路,编号从1到M。两个交叉点可以由多条道路连接,但没有道路将交叉点与自己连接。每条观光环线都是一系列道路编号y_1,...,y_k,k> 2。道路y_i(1 <= i <= k-1)连接交叉点x_i和x_ {i + 1},道路y_k连接交叉点x_k和x_1。所有的数字x_1,...,x_k应该是不同的。观光路线的长度是观光路线上所有道路长度的总和,即L(y_1)+ L(y_2)+ ... + L (y_k)其中L(y_i)是道路y_i的长度(1 <= i <= k)。你的程序必须找到这样一条观光路线,其长度最短,或者说明这是不可能的,因为镇上没有观光环线。

Input

第一行输入包含两个正整数:交叉点N <= 100和道数M <= 10000。 接下来的M行中的每一行描述一条道路。 它包含3个正整数:第一个交点的编号,第二个交点的编号和道路的长度(小于500的正整数)。

Output

输出中只有一行,一个字符串。如果没有任何观光路线,输出'No solution.' 或者列出最短观光路线上所有交叉点的编号,以便让我们知道如何设计路线(即从我们对观光路线的定义中的数字x_1到x_k),由空格分离。如果有多条最小长度的观光路线,您可以输出其中任何一条。

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

Sample Output

1 3 5 2

解题思路:

本题其实就是求一个图中的最小环的路径.

AC代码:

 1 #include<cstdio>
 2 #include<iostream>
 3
 4 using namespace std;
 5
 6 int g[105][105],dis[105][105],path[105][105];
 7 //path[i][j]表示i到j的最短路径中j的前一个点
 8 //dis[i][j]表示i到j最短的那条路径
 9 int n,m,ans[105],mi,cnt;
10
11 inline void chushihua() {
12     for(int i = 1;i <= n; i++)
13         for(int j = 1;j <= n; j++)
14             dis[i][j] = g[i][j] = 0x3f3f,path[i][j] = i;
15 }
16
17 inline void _read() {
18     int u,v,w;
19     for(int i = 1;i <= m; i++) {
20         scanf("%d%d%d",&u,&v,&w);
21         dis[u][v] = dis[v][u] = g[u][v] = g[v][u] = min(w,dis[u][v]);
22     }
23 }
24
25 inline void Floyd() {
26     mi = 0x3f3f;
27     for(int k = 1;k <= n; k++){
28         for(int i = 1;i < k; i++)
29             for(int j = 1;j < i; j++) {
30                 if(dis[i][j] + g[i][k] + g[k][j] < mi) {
31                     mi = dis[i][j] + g[i][k] + g[k][j];
32                     int tmp = j;
33                     cnt = 0;
34                     while(tmp != i) {
35                         ans[cnt++] = tmp;
36                         tmp = path[i][tmp];
37                     }
38                     ans[cnt++] = i;
39                     ans[cnt++] = k;
40                 }
41             }
42     for(int i = 1;i <= n; i++)
43         for(int j = 1;j <= n; j++) {
44             if(dis[i][k] + dis[k][j] < dis[i][j]) {
45                 dis[i][j] = dis[i][k] + dis[k][j];
46                 path[i][j] = path[k][j];
47             }
48         }
49     }
50 }
51
52 inline void _print() {
53     if(mi == 0x3f3f)
54         printf("No solution.");
55     else {
56         for(int i = 1;i < cnt; i++)
57             printf("%d ",ans[i]);
58         printf("%d",ans[0]);
59     }
60
61 }
62
63 int main()//简洁易懂的主函数
64 {
65     scanf("%d%d",&n,&m);
66     chushihua();
67     _read();
68     Floyd();
69     _print();
70     return 0;
71 }

转载于:https://www.cnblogs.com/lipeiyi520/p/11290269.html

POJ 1734 Sightseeing trip(Floyd)相关推荐

  1. poj 1734 Sightseeing trip(floyd 拓展 求最小环)

    对于floyd 拓展为什么可以判断 出最小环还是不是太理解 苟且 先贴下模版吧 感谢:心_随_梦_翔 的分析 http://hi.baidu.com/%D0%C4_%CB%E6_%C3%CE_%CF% ...

  2. POJ - 1734 Sightseeing trip(最小环+输出路径)

    题目链接:点击查看 题目大意:给定一张无向图,求图中至少一个包含三个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的方案,若最小环不唯一 ...

  3. POJ1734 Sightseeing trip floyd求最小环问题

    问题描述 m个点, m条边, 求图中存在的路径最小的环 样例 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 Sa ...

  4. POJ 1637 Sightseeing tour(最大流)

    POJ 1637 Sightseeing tour 题目链接 题意:给一些有向边一些无向边,问能否把无向边定向之后确定一个欧拉回路 思路:这题的模型很的巧妙,转一个http://blog.csdn.n ...

  5. URAL 1004 Sightseeing trip

    [报告] 非常非常裸的最小环-- 不过我实在是太惊讶了,因为URAL里的太多题目都是有多解的,弄的我郁闷万分.最后只好把别人的给交了. 程序并不是很出色,请不要盲目模仿--这个程序是不能AC的. 说句 ...

  6. POJ 3165 最短路 floyd

    POJ  3165  最短路 floyd http://poj.org/problem?id=3615 dp方程(f[i][j]>MAX(f[i][k],f[k][j])) f[i][j]=MA ...

  7. Sightseeing trip POJ - 1734 Floyd 最小环

    一.内容 There is a travel agency in Adelton town on Zanzibar island. It has decided to offer its client ...

  8. 【POJ 1734】 Sightseeing Trip

    [题目链接] 点击打开链接 [算法] floyd求最小环 输出路径的方法如下,对于i到j的最短路,我们记pre[i][j]表示j的上一步 在进行松弛操作的时候更新pre即可 [代码] #include ...

  9. POJ 1734 求最小环路径 拓展Floyd

    九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11888019 题意: n个点 m条无向边 下面m条有权无向边 问图中最小环的路径 ...

最新文章

  1. C#清除HTML样式
  2. java直接内存为什么快_直接内存与 JVM 源码分析
  3. 3.4 usermod命令 3.5 用户密码管理 3.6 mkpasswd命令
  4. springboot整合spring Cache(redis)
  5. MSF(二):msf外部/内部常用命令
  6. 【渝粤题库】陕西师范大学291003综合英语(三)作业(高起专、高起本)
  7. 把student a am i 变成 i am a student(两种方法)
  8. python的命令解析getopt.getopt()函数分析
  9. SQL必知必会-联结
  10. 张小龙的区区一件衣服竟然能引起这么大骚动
  11. Packets 1037A(二进制数)
  12. 37,字节跳动Python面试
  13. java中的Stack解析
  14. 多元思维模型——全学科及其核心思维模型
  15. java中block标签_[Java教程]Clouda开发随笔之block标签
  16. latex ctex 中文目录在pdf阅读器的“书签”选项卡中显示乱码的解决方法
  17. 20221024 matlab快速画图中图
  18. Apache Hadoop大数据集群及相关生态组件安装
  19. 用python进行微信分析(带群发功能)
  20. MP2451 VOUT计算公式 表

热门文章

  1. phpmyadmin更新php,phpmyadmin 修改记录(不断更新)_PHP教程
  2. 漫谈物理设计 - Floorplan
  3. 院士论坛︱李德仁院士:展望大数据时代的地球空间信息学(论文版)
  4. 计算机组成原理答辩记录表,计算机组成原理答辩论文.doc
  5. PCI网卡上扩展ROM编程 4.利用8139C网卡读写EPROM
  6. HCL IRF BFD配置
  7. 通过curl获取HTTP状态返回码
  8. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day51】—— tomcat
  9. 节日专访 | Be yourself at Zilliz
  10. MTK开发板设备树的修改---I2C设备 3.18内核