poj1734 Sightseeing trip (输出最小环路径)
题意:
n个点m条边,如果图中有环,输出最小环路径,否则输出"No solution."
思路:
开一个pre[][]数组
pre[i][j]表示i到j最短路上j的入点(前驱)
每当任意两点i,j之间的最短路更新,同时更新pre[i][j]
查找路径操作具体看代码
code:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<vector>
using namespace std;
const int maxm=105;
const int inf=1e8;
int d[maxm][maxm];//最短路图(可改)
int g[maxm][maxm];//原图(不改)
int pre[maxm][maxm];//pre[i][j]表示i到j最短路中j的入点(前驱)
vector<int>res;
int n,m;
void getpath(int i,int j,int k){res.clear();while(j!=i){res.push_back(j);j=pre[i][j];}res.push_back(i);res.push_back(k);
}
void floyd(){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){d[i][j]=g[i][j];}}int ans=inf;for(int k=1;k<=n;k++){for(int i=1;i<k;i++){for(int j=i+1;j<k;j++){int t=g[i][k]+g[k][j]+d[i][j];if(t<ans){ans=t;getpath(i,j,k);}}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){int t=d[i][k]+d[k][j];if(t<d[i][j]){d[i][j]=t;pre[i][j]=pre[k][j];}}}}if(ans==inf){puts("No solution.");}else{int len=res.size();for(int i=0;i<len;i++){if(i)putchar(' ');printf("%d",res[i]);}puts("");}
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){//initfor(int j=1;j<=n;j++){g[i][j]=(i==j)?0:inf;pre[i][j]=i;}}for(int i=1;i<=m;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);g[a][b]=g[b][a]=min(g[a][b],c);}floyd();return 0;
}
poj1734 Sightseeing trip (输出最小环路径)相关推荐
- POJ1734 sightseeing trip(YBT3201)
试题描述 给定一张无向图,求图中一个至少包含 3 个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的方案,若最小环不唯一,输出任意一个均 ...
- 【POJ1734】Sightseeing Trip 无向图最小环
题目大意:给定一个 N 个顶点的无向图,边有边权,如果存在,求出该无向图的最小环,即:边权和最小的环,并输出路径. 题解:由于无向图,且节点数较少,考虑 Floyd 算法,在最外层刚开始遍历到第 K ...
- poj1734 Sightseeing trip[最小环]
一个最小环裸题.最小环的两种求法dijkstra和Floyd直接参见这里我就是从这里学的,不想写了. 注意这里最重要的一个点是利用了Floyd的dp过程中路径上点不超过$k$这一性质,来枚举环上最大编 ...
- 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 ...
- POJ - 1734 Sightseeing trip(最小环+输出路径)
题目链接:点击查看 题目大意:给定一张无向图,求图中至少一个包含三个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的方案,若最小环不唯一 ...
- URAL 1004 Sightseeing trip
[报告] 非常非常裸的最小环-- 不过我实在是太惊讶了,因为URAL里的太多题目都是有多解的,弄的我郁闷万分.最后只好把别人的给交了. 程序并不是很出色,请不要盲目模仿--这个程序是不能AC的. 说句 ...
- 求二叉树中的第一条最长路径长度,并输出最长路径上的节点
#include <stdio.h> #define MaxSize 1000typedef struct BiTNode {int data;struct BiTNode *lchild ...
- 算法 图中求最小环路径 最小环个数 最大平均环 求简单无向图中环的个数
最小环问题:求个图中环路径代价最小的回路. 如何求最小环?假如有 路径1->3->2,如果此时已经知道2-1的最短路径就好了. 回想下floyed的更新过程,就会发现更新第k次时,比k小的 ...
- poj1734(最小环+路径)
最小环问题:指的是在一张图中找出一个环,使得这个环的各边的权值之和最小. 方法一:断边法: 1.断开环的一条边(Wij=inf) 2.用Dijstra算法求出i->j的最短路径 3.恢复这条边的 ...
最新文章
- vuex之state-状态对象的获取方法(三)
- VC++ AfxBeginThread 与 CreateThread 的区别
- JS-为金额添加千分位逗号分割符
- 实战:基于自定义注解实现自定义框架Spring
- Python日志模块学习,从这里开始...
- 【分布计算环境学习笔记】3 软件构件结构
- Tex, LaTex概念及实例
- 恩布开源安卓手机IM,EntboostIM发布1.5.1版本
- 区块链应用大数据的优势有哪些
- c语言for语句10内的累乘,c语言累加累乘教案.doc
- HotFix方案原理
- Develop -- Training(十五) -- 显示高效位图
- arm64的prefetch/prefetchw/spin_lock_prefetch
- android实现vr 功能,VR模式成亮点:属于Android N的10大新功能
- Php静默授权,【公众号】微信第三方登录(静默授权和非静默授权)(具体代码:U盘 新浪云SAE)...
- 基于Three.js和MindAR实现的网页端人脸识别功能和仿抖音猫脸特效换脸的各种面罩实现(含源码)
- 心はちょっと疲れた、誰も片隅に休んで……作者の宝物は
- 消息队列MQ常见面试题
- DLP市场份额第一 | IDC 首份中国数据泄露防护市场份额报告发布
- 云计算实训之项目3-基于微信实现自动化监控报警