最小环用floyd改编。

  hdu1599特殊一些。要求至少有三个不同的点,并且除了起点与终点重合外,中间不能有环。有点很奇怪,最大值不能为0x3f3f3f3f。

  poj1374就没那么讲究。

  

 //hdu1599
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = , INF=;
int Map[N][N], dist[N][N], pre[N][N];
int mc;
void fc(int n)
{
int i,j,k;
mc=INF;
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
dist[i][j]=Map[i][j];
pre[i][j]=i;
}
}
for(k=;k<=n;k++)
{
for(i=;i<k;i++)
{
for(j=;j<i;j++)
{
if(dist[i][j]+Map[k][j]+Map[i][k]<mc)
mc=min(mc,dist[i][j]+Map[k][j]+Map[i][k]);
}
}
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
if(dist[k][j]!=INF&&dist[i][k]!=INF&&dist[i][j]>dist[i][k]+dist[k][j])
{
dist[i][j]=dist[i][k]+dist[k][j];
pre[i][j]=pre[k][j];
}
}
}
}
}
void init(int n)
{
for(int i=;i<=n;i++)
{
Map[i][i]=;
for(int j=;j<i;j++)
Map[j][i]=Map[i][j]=INF;
}
}
int main()
{
//freopen("test.txt","r",stdin);
int n,m,i,j,k;
while(scanf("%d%d",&n,&m)!=EOF)
{
init(n);
while(m--)
{
scanf("%d%d%d",&i,&j,&k);
if(i==j) continue;
Map[i][j]=Map[j][i]=min(Map[i][j],k);
}
fc(n);
if(mc!=INF) printf("%d\n",mc);
else printf("It's impossible.\n");
}
return ;
}

下面是poj1374

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int N=, INF=0x3f3f3f3f;
int Map[N][N], dist[N][N], pre[N][N];
int mc, p[N], t, n;
void fc()
{
int i,j,k;
mc=INF;
t=;
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
dist[i][j]=Map[i][j];
pre[i][j]=i;
}
}
for(k=;k<=n;k++)
{
for(i=;i<=n;i++)
{
if(Map[k][i]==INF) continue;
if(i==k) continue;
for(j=;j<=n;j++)
{
if(i==j||j==k) continue;
if(dist[i][j]==INF||Map[j][k]==INF) continue;
int temp=dist[i][j]+Map[i][k]+Map[k][j];
if(temp<mc)
{
mc=temp;
int x=j;
t=;
while(x!=i)
{
p[t++]=x;
x=pre[i][x];
}
p[t++]=i;
p[t++]=k;
}
}
}
for(i=;i<=n;i++)
{
if(dist[i][k]==INF) continue;
for(j=;j<=n;j++)
{
if(dist[i][j]>dist[i][k]+dist[k][j])
{
dist[i][j]=dist[i][k]+dist[k][j];
pre[i][j]=pre[k][j];
}
}
}
}
}
int main()
{
int i,j,k,m;
//freopen("test.txt","r",stdin);
//freopen("out.txt","w",stdout);
while(cin>>n>>m)
{
for(i=;i<=n;i++)
for(j=;j<=n;j++)
Map[i][j]=INF;
while(m--)
{
scanf("%d%d%d",&i,&j,&k);
Map[j][i]=Map[i][j]=k<Map[i][j]?k:Map[i][j];
}
fc();
if(mc==INF) printf("No solution.\n");
else
{
printf("%d",p[]);
for(i=;i<t;i++) printf(" %d",p[i]);
printf("\n");
}
}
return ;
}

最小环 hdu1599 poj1734的更多相关文章

  1. 算法复习——floyd求最小环(poj1734)

    题目: 题目描述 N 个景区,任意两个景区之间有一条或多条双向的路来连接,现在 Mr.Zeng 想找一条旅游路线,这个路线从A点出发并且最后回到 A 点,假设经过的路线为 V1,V2,....VK,V ...

  2. HDU1599(Floyd最小环)

    Floyd最小环理解+模板: https://www.cnblogs.com/DF-yimeng/p/8858184.html 除了上述博文里写的,我再补充几点我的理解. 1.为什么先枚举ij求经过i ...

  3. 【POJ1734】Sightseeing Trip 无向图最小环

    题目大意:给定一个 N 个顶点的无向图,边有边权,如果存在,求出该无向图的最小环,即:边权和最小的环,并输出路径. 题解:由于无向图,且节点数较少,考虑 Floyd 算法,在最外层刚开始遍历到第 K ...

  4. poj1734 Sightseeing trip【最小环】

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:8588   Accepted:3224   ...

  5. Floyd求最小环!(转载,非原创) 附加习题(原创。)HDU-1599

    //Floyd 的 改进写法可以解决最小环问题,时间复杂度依然是 O(n^3),储存结构也是邻接矩阵 int mincircle = infinity; Dist = Graph; ;k<nVe ...

  6. poj1734 Sightseeing trip[最小环]

    一个最小环裸题.最小环的两种求法dijkstra和Floyd直接参见这里我就是从这里学的,不想写了. 注意这里最重要的一个点是利用了Floyd的dp过程中路径上点不超过$k$这一性质,来枚举环上最大编 ...

  7. POJ1734 Sightseeing trip (Floyd求最小环)

    学习了一下用Floyd求最小环,思路还是比较清晰的. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring ...

  8. POJ1734/Floyd求最小环

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6647   Accepted: 2538 ...

  9. hdu1599(无向图的最小环模板)

    题意:杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1,那么必须满足K>2,就是说至 ...

随机推荐

  1. H3C交换机配置学习随笔

    1.交换机配置VLAN vlan 创建VLAN: <h3c>system-view [h3c]vlan 10 删除ID为10的vlan:undo vlan 10 注:任何型号的交换机,都支 ...

  2. BZOJ 3631: [JLOI2014]松鼠的新家 树上差分 + LCA

    Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在“树”上.松鼠想邀 ...

  3. Python数据分析----scipy稀疏矩阵

    一.sparse模块: python中scipy模块中,有一个模块叫sparse模块,就是专门为了解决稀疏矩阵而生.本文的大部分内容,其实就是基于sparse模块而来的 导入模块:from scipy ...

  4. 【剑指Offer】58、对称的二叉树

      题目描述:   请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的.   解题思路:   本题判断一棵树是不是对称的,和第18题可以对比分 ...

  5. 【剑指Offer】36、两个链表的第一个公共结点

      题目描述:   输入两个链表,找出它们的第一个公共结点.   解题思路:   本题首先可以很直观的想到蛮力法,即对链表1(假设长度为m)的每一个结点,遍历链表2(假设长度为n),找有没有与其相同的 ...

  6. CentOS 7.2 安装Python3.5.2

    系统环境: CentOS 7.2 x86_64 安装相关包 (1)# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sq ...

  7. Vue packages version mismatch

    开发过程中,之前做的vue项目,一段时间后拿出来重新运行,报错: 打开vue-template-compiler/index.js查看错误提示,如下: 当安装的vue版本和package.json中的 ...

  8. 图论·Floyd算法·HDU2544&1874 (伪)2066

    在看到1874的题时,第一反应是用上一篇的并查集方法,后来查了一下是要用Floyd做,所以就去查Floyd算法的资料. 即插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法. 核心代码:  ma ...

  9. hdu 2444 交叉染色判断二分图+二分最大匹配

    /*1A 31ms*/ #include<stdio.h> #include<string.h> #define N 300 int n; struct node { int ...

  10. spring boot下接口调用失败重试方案

    背景: 在项目开发中,有时候会出现接口调用失败,本身调用又是异步的,如果是因为一些网络问题请求超时,总想可以重试几次把任务处理掉. 一些RPC框架,比如dubbo都是有重试机制的,但是并不是每一个项目 ...