原题链接

解题思路:Floyd求最小环问题
C++代码
#include <bits/stdc++.h>
using namespace std;
const int N = 110, INF = 0x3f3f3f3f;
int g[N][N], d[N][N];
int pos[N][N];
int path[N], cnt;
int n, m;
int ans = INF;void get_path(int i, int j)
{if (pos[i][j] == 0) return ;else{get_path(i, pos[i][j]);path[cnt ++ ] = pos[i][j];get_path(pos[i][j], j);}
}void floyd()
{for (int k = 1; k <= n; k ++ ){for (int i = 1; i < k; i ++ ){for (int j = i + 1; j < k; j ++ ){if ((long long) d[i][j] + g[j][k] + g[k][i] < ans){ans = d[i][j] + g[j][k] + g[k][i];cnt = 0;path[cnt ++ ] = j;path[cnt ++ ] = k;path[cnt ++ ] = i;get_path(i, j);}}}for (int i = 1; i <= n; i ++ ){for (int j = 1; j <= n; j ++ ){if (d[i][j] > d[i][k] + d[k][j]){d[i][j] = d[i][k] + d[k][j];pos[i][j] = k;}}}}
}int main()
{cin >> n >> m;for (int i = 1; i <= n; i ++ ){for (int j = 1; j <= n; j ++ ){if (i != j) g[i][j] = INF;}}for (int i = 0; i < m; i ++ ){int a, b, c;cin >> a >> b >> c;g[a][b] = g[b][a] = min(g[a][b], c);}memcpy(d, g, sizeof d);floyd();if (ans == INF) cout << "No solution." << endl;else {for (int i = 0; i < cnt; i ++ ) cout << path[i] << " ";}return 0;
}

参考博客

Sightseeing Trip(Floyd)相关推荐

  1. 弗洛伊德算法(Floyd)简介

    弗洛伊德算法(Floyd)简介 Floyd算法适用于解决求最短路径问题,相比于Digkstra算法思路更加简单,更容易理解,但是效率会明显低很多,可以作为初步学习的一种方法. 目录 弗洛伊德算法(Fl ...

  2. 【算法】弗洛伊德(Floyd)算法

    这个算法主要要弄懂三个循环的顺序关系. 弗洛伊德(Floyd)算法过程: 1.用D[v][w]记录每一对顶点的最短距离. 2.依次扫描每一个点,并以其为基点再遍历所有每一对顶点D[][]的值,看看是否 ...

  3. 七、最短路径——弗洛伊德(Floyd)算法

    为了能讲明白弗洛伊德(Floyd)算法的精妙所在,我们先来看最简单的案例.下图是一个最简单的3个顶点连通网图. 我们先定义两个二维数组D[3][3]和P[3][3],D代表顶点到顶点的最短路径权值和的 ...

  4. 【数据结构】图—弗洛伊德(Floyd)算法

    前言 上文介绍了迪杰斯特拉(Dijkstra)算法,计算网图的某个源点到其余各个顶点的最短路径问题(边权值为非负值),本文介绍另一个求最短路径的算法--弗洛伊德算法,它是计算所有顶点到所有顶点的最短路 ...

  5. 弗洛伊德(Floyd)算法之两点之间的最短距离问题

    1.概述 (1)与迪杰斯特拉(Dijkstra)算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法,该算法 名称以创始人之一.1978 年图灵奖获得者.斯坦福大学计 ...

  6. 最短路径之弗洛伊德算法(Floyd)——动态规划

    弗洛伊德算法(Floyd)主要针对多源最短路径,且可以解决路径中有负权的情况(不包含负权回路),但是迪杰斯特拉算法只能解决正权值的单源最短路径(可以迭代多次求多源). 1.弗洛伊德算法的基本思想 弗洛 ...

  7. 算法系列——弗洛伊德算法(Floyd)

    本系列旨在用简单的人话讲解算法,尽可能避免晦涩的定义,读者可以短时间内理解算法原理及应用细节.我在努力! 本篇文章编程语言为Python,供参考. 弗洛伊德算法(Floyd) 典型最短路径算法.用于计 ...

  8. 大话数据结构-迪杰斯特拉算法(Dijkstra)和弗洛伊德算法(Floyd)

    6 最短路径   最短路径,对于图来说,是两顶点之间经过的边数最少的路径:对于网来说,是指两顶点之间经过的边上权值之和最小的路径.路径上第一个顶点为源点,最后一个顶点是终点. 6.1 迪杰斯特拉(Di ...

  9. 数据结构——图——弗洛伊德(Floyd)算法

    数据结构--图--弗洛伊德(Floyd)算法 为了能讲明白弗洛伊德(Flbyd)算法的精妙所在,我们先来看最简单的案例.图7-7-12的左图是一个最简单的3个顶点连通网图. 我们先定义两个二维数组D[ ...

最新文章

  1. 【Java】Java中的数据类型说明
  2. 新的一年,开始新的学习旅途
  3. NO.111 禅道导出数据做透视表,让你轻松做年终工作总结。
  4. Flink状态管理与CheckPoint、Savepoint
  5. Centos 利用yum源安装 nginx stream模块
  6. 2020CCPC(威海) - Caesar Cipher(线段树+哈希)
  7. BZOJ 1396:识别子串 SA+树状数组+单调队列
  8. iOS iOS9下实现app间的跳转
  9. How UI5 and FIORI deliver central Javacript library code MIME
  10. graphql_GraphQL在Wildfly群上
  11. 生成icon图标 1005 html 左上角icon图标
  12. 安装eclipse的android adt 插件,eclipse安装ADT插件
  13. 转《JAVA和C#得相同点和不同点》
  14. vb.net学习笔记
  15. socket简介 - 获取简单网页内容
  16. 通俗易懂地理解并发和并行的区别
  17. python之math_cmath
  18. 1号信令、7号信令和PRI信令
  19. matlab划分训练集验证和测试集代码_数据集划分为训练集和测试集并生成标签--matlab代码...
  20. Burp Suite代理和火狐浏览器的设置(超详细)

热门文章

  1. 12月8日 排序和字符数组
  2. 中国聚乙烯亚胺(PEI)行业研究与投资前景报告(2022版)
  3. JAVA模拟pcb池带ui界面_电路设计软件系列教程(四),Protel DXP电路设计软件之创建PCB文件...
  4. popper.min.js.map
  5. assert_param()函数
  6. SAP ABAP 学习总结(1):初始SAP ABAP
  7. 如何编写微信小程序的网络请求的代码
  8. 一文读懂数据库发展史
  9. Sina微博 SSO登陆过程分析
  10. 【一篇文章搞懂】java正则表达式匹配字母开头