POJ 1734 求最小环路径 拓展Floyd
九野的博客,转载请注明出处:http://blog.csdn.net/acmmmm/article/details/11888019
题意:
n个点 m条无向边
下面m条有权无向边
问图中最小环的路径
学习的拓展Floyd,先找环后松弛
dfs会做的简单一点
//搜索比较好想
#include <cstdio>
#include <cstring>
#include <iostream>
#define find_min(a,b) a<b?a:b
#define N 150
#define inf 0x7ffffff
using namespace std;
inline int Min(int a,int b){return a>b?b:a;} int map[N][N],dis[N][N],pre[N][N],path[N],n; int main()
{
int i,j,k,m,u,v,d;
int num; while(~scanf("%d%d",&n,&m))
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]=inf, pre[i][j]=i; while(m--)
{
scanf("%d %d %d",&u,&v,&d);
map[u][v]=map[v][u]=Min(map[v][u],d);
}
memcpy(dis,map,sizeof(map));
int ans=inf;
for(k=1;k<=n;k++)
{
for(i=1;i<k;i++)
for(j=i+1;j<k;j++)
{
int len=dis[i][j]+map[i][k]+map[k][j];
if(len<ans){
ans=len;
num=0;
int now=j;
while(now!=i)
path[num++]=now,now=pre[i][now]; //pre[i][j] 表示 i->pre[i][j]->j path[num++]=i; path[num++]=k; }
}
for(i=1;i<=n;i++)//普通的松弛k点
for(j=1;j<=n;j++)
if(dis[i][j]>dis[i][k]+dis[k][j])
{
dis[i][j]=dis[i][k]+dis[k][j];
pre[i][j]=pre[k][j];//这个学习了
}
}
if(ans==inf){printf("No solution.\n");continue;}
for(i=0;i<num-1;i++)printf("%d ",path[i]);
printf("%d\n",path[i]);
}
return 0;
}
POJ 1734 求最小环路径 拓展Floyd的更多相关文章
- #10072. 「一本通 3.2 例 1」Sightseeing Trip(floyd求最小环+路径)
https://loj.ac/problem/10072 针对无向图 因为Floyd是按照结点的顺序更新最短路的,所以我们在更新最短路之前先找到一个连接点k,当前的点k肯定不存在于已存在的最短路f[i ...
- URAL 1004 Sightseeing Trip(floyd求最小环+路径输出)
https://vjudge.net/problem/URAL-1004 题意:求路径最小的环(至少三个点),并且输出路径. 思路: 一开始INF开大了...无限wa,原来相加时会爆int... 路径 ...
- POJ 1734 无向图最小环/有向图最小环
给定一张图,求图中一个至少包含三个点的环,环上的点不重复,并且环上的边的长度之和最小. 点数不超过100个 输出方案 无向图: /*Huyyt*/ #include<bits/stdc++.h& ...
- poj1734Sightseeing trip——无向图求最小环
题目:http://poj.org/problem?id=1734 无向图求最小环,用floyd: 在每个k点更新f[i][j]之前,以k点作为直接连到i,j组成一个环的点,这样找一下最小环: 注意必 ...
- Sightseeing trip POJ - 1734 -Floyd 最小环
POJ - 1734 思路 : Floyd 实质 dp ,优化掉了第三维. dp [ i ] [ j ] [ k ] 指的是前k个点优化后 i -> j 的最短路. 所以我们就可以 ...
- POJ 1734 Sightseeing trip(无向图最小环+输出路径)
题目链接 #include <cstdio> #include <string> #include <cstring> #include <queue> ...
- floyd原理以及求最小环
floyd这个东西学会了好久了,但是原理总是忘记,或者说没有真正的明白,这里在说一下. 我们要求的是任意的 i,j 之间的最短路径,用动态规划的思想来解决就是f[i,j,k]表示i到j中间节点不超过k ...
- FLOYD 求最小环
首先 先介绍一下 FLOYD算法的基本思想 设d[i,j,k]是在只允许经过结点1…k的情况下i到j的最短路长度则它有两种情况(想一想,为什么):最短路经过点k,d[i,j,k]=d[i,k,k- ...
- 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
随机推荐
- Installing — pylibmc 1.2.3 documentation
Installing - pylibmc 1.2.3 documentation libmemcached
- 我的Android进阶之旅------>Android服务的生命周期回调方法
先引用一段官网上的文字 ======================================================================================== ...
- Clash of Clans(COC)资源压缩解密
Clash of Clans,简称为COC,中文名<部落冲突>,是ios平台上一款相当火爆的战斗策略类游戏,开发商是芬兰的supercell,据说日收入上百万美刀,创造了手游史上的一个神话 ...
- 【计算几何初步-判断是否凸多边形】【HDU2108】Shape of HDU
Shape of HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- JQ 动态添加节点
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 浅说CPU并行计算与GPU并行计算
最近在学一门课,叫做“C++与并行计算”.要用到多CPU(进程)并行的原理,实现语言是C++的MPI接口.联想到上学期用到CUDA C/C++来做并行计算,就对这两门语言做一个总结,分享下自己关于并行 ...
- activity的生命周期详解
刚在看mars老师的视频,看到activity的生命周期,就看了一下,总结了一下.下面是各函数的调用时机 为了更清楚的看清楚工作的具体过程,举例如下: ,建立两个activity,一个main,一个a ...
- Long,String类型的两个值进行比较,注意点!!!
一: . Long 类型指的是 java.util.Lang 对象,而不是基本类型 long (注意大小写)Java中如果使用 == 双等于比较对象,等于比较的是两个对象的内存地址,也就是比较两个对象 ...
- linux 内核开发基础
开发特点 不需要第三方库支持 使用GNU C 没有内存保护机制 杜绝浮点数 栈区固定 必须关注并发及同步 注意可移植性
- 创建文件夹并解决解决unicode和ASCII码转换的问题
# -*- coding: UTF-8 -*-import sysimport timeimport os #解决unicode和ASCII码转换的问题reload(sys) #解决unicode和A ...