正题

就是给出一个无向图,求最小环。


输入输出(需要自取)

Input

每组数据的第一行包含两个正整数:十字路口的个数N(N<=100),另一个是道路的 数目M(M<10000)。接下来的每一行描述一条路:每一行有三个正整数:这条路连接的两个路口的编号,以及这条路的长度(小于500的正整数)。

Output

  每一行输出都是一个答案。如果这条观光路线是不存在的话就显示“No solution”;或者输出这条最短路线的长度。

Sample Input

样例1

5 7
1 4 1
1 3 300
3 1 10
1 2 16
2 3 100
2 5 15
5 3 20

样例2

4 3
1 2 10
1 3 20
1 4 30
-1

Sample Output

样例1

61

样例2

No solution


解题1:Floyd算法

就是一个Floyd算法,然后在中间统计一下最小环。

代码(Floyd)

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,m,a[101][101],dis[101][101],ans,from,to,lon;
int main()
{scanf("%d%d",&n,&m);memset(a,127/3,sizeof(a));memset(dis,127/3,sizeof(dis));for (int i=1;i<=m;i++){scanf("%d%d%d",&from,&to,&lon);a[from][to]=lon;a[to][from]=lon;//记录距离dis[from][to]=lon;dis[to][from]=lon;//记录最短路}ans=707406377;for (int k=1;k<=n;k++){for (int i=1;i<=n;i++)for (int j=i+1;j<=n;j++)if (dis[i][j]!=dis[0][0])ans=min(ans,dis[i][j]+a[i][k]+a[k][j]);//更新最小环for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);//更新最短路}if (ans==707406377) printf("No solution");else printf("%d",ans);
}

当然,也可以进行优化,当k没有枚举到这个点时,那么后面的都没有被算出来,而且这是个无向图

代码(Floyd优化)

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,m,a[101][101],dis[101][101],ans,from,to,lon;
int main()
{scanf("%d%d",&n,&m);memset(a,127/3,sizeof(a));memset(dis,127/3,sizeof(dis));for (int i=1;i<=m;i++){scanf("%d%d%d",&from,&to,&lon);a[from][to]=lon;a[to][from]=lon;dis[from][to]=lon;dis[to][from]=lon;}ans=707406377;for (int k=1;k<=n;k++){for (int i=1;i<k;i++)for (int j=i+1;j<k;j++)if (dis[i][j]!=dis[0][0])ans=min(ans,dis[i][j]+a[i][k]+a[k][j]);for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);}if (ans==707406377) printf("No solution");else printf("%d",ans);
}

解题2:dijkstra

枚举边,然后删去那条边,然后求那条边头尾最短路,接下来恢复那条边,加上那条边的权值就是一个环的长度。

代码(dijkstra)

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int w,minl,n,m,a[101][101],c[101],ans,from,to,lon,l[10001][2],mn,s;
bool b[101];
int main()
{scanf("%d%d",&n,&m);mn=0;memset(a,127/3,sizeof(a));for (int i=1;i<=m;i++){scanf("%d%d%d",&from,&to,&lon);a[from][to]=lon;a[to][from]=lon;l[++mn][0]=from;l[mn][1]=to;//记录边}ans=707406377;for (int k=1;k<=mn;k++){int o=a[l[k][0]][l[k][1]];a[l[k][0]][l[k][1]]=707406378;a[l[k][1]][l[k][0]]=707406378;//删边s=l[k][0];for (int i=1;i<=n;i++) c[i]=a[s][i];memset(b,false,sizeof(b));b[s]=true;c[s]=0;for (int i=1;i<n;i++){minl=707406377;w=0;for (int j=1;j<=n;j++)if (!b[j] && c[j]<minl){minl=c[j];w=j;}if (w==0) break;b[w]=true;for (int j=1;j<=n;j++)if (c[w]+a[w][j]<c[j])c[j]=c[w]+a[w ][j];}//以上dij不解释ans=min(ans,c[l[k][1]]+o);//求该环长度a[l[k][0]][l[k][1]]=o;//恢复两条边a[l[k][1]][l[k][0]]=o;}if (ans==707406377) printf("No solution");else printf("%d",ans);
}

ssl1763-观光旅游【最小环,Floyd,dijkstra】相关推荐

  1. vijos 观光旅游 最小环fl 呆详看

    背景 湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观.学校认为大力发展旅游业,可以带来一笔可观的收入. 描述 学校里面有N个景点.两个景点之间可能直接有道路相连,用Dist[I,J]表示它 ...

  2. 【最小环】【Floyed】观光旅游(ssl 1763)

    观光旅游 ssl 1763 题目大意: 在一个图中找到最小环 原题: 题目背景 在桑给巴尔岛的Adelton城镇上有一个旅游机构.它们决定在提供许多的其它吸引之外,再向客人们提供旅游本镇的服务. 为了 ...

  3. 最小环 floyd java_Floyd最小环

    最小环:从一个点出发,经过一条简单路径回到起点成为环.图的最小环就是所有环中长度最小的. 怎样求最小环呢? 1传统的解决方法(dijkstra): 任意一个最小环环的权值,我们都可以看成两个有边相连的 ...

  4. matlab求解关键,基于遗传算法的多辆洒水车最优路径求解(其中包含MATLAB的一些关键语句说明和Floyd,Dijkstra,Euler算法).doc...

    基于遗传算法的多辆洒水车最优路径求解(其中包含MATLAB的一些关键语句说明和Floyd,Dijkstra,Euler算法) 摘要 车辆路径问题可以分为以点为服务和以边为服务两种,洒水车问题是以边为服 ...

  5. 霍尔闭环电流传感器在电动观光旅游车上的应用

    安科瑞王丹丹acrel2021 摘要:本文介绍了基于霍尔闭环原理,即磁平衡式原理的电流传感器在电动观光旅游车上的使用方法,替代传统的霍尔器件,较好的解决了电动车行业现有霍尔传感器的基本问题,在稳定性上 ...

  6. 安科瑞霍尔闭环电流传感器在电动观光旅游车上的应用浅析

     摘要: 本文介绍了基于霍尔闭环原理,即磁平衡式原理的电流传感器在电动观光旅游车上的使用方法,替代传统的霍尔器件,较好的解决了电动车行业现有霍尔传感器的基本问题,在稳定性上更加优越. 关键词:霍尔闭环 ...

  7. 霍尔闭环电流传感器在电动观光旅游车上的应用-安科瑞黄安南

    摘要:本文介绍了基于霍尔闭环原理,即磁平衡式原理的电流传感器在电动观光旅游车上的使用方法,替代传统的霍尔器件,较好的解决了电动车行业现有霍尔传感器的基本问题,在稳定性上更加优越. 关键词:霍尔闭环;电 ...

  8. 观光旅游(Floyd)

    Description 在桑给巴尔岛的Adelton城镇上有一个旅游机构.它们决定在提供许多的其它吸引之外,再向客人们提供旅游本镇的服务. 为了从提供的吸引服务中尽可能地获利,这个旅游机构接收了一个精 ...

  9. 7-9 旅游规划 (25分) 【最短路径 Floyd+Dijkstra】

    有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...

最新文章

  1. oracle ora 14047,ORA-14047: ALTER TABLE|INDEX RENAME 不可以与其它分区组合
  2. Ubuntu 安装和修改Apache2端口
  3. 猿团专访云信CTO阙杭宁——网易云信“稳定”背后的秘密
  4. tensorflow 之 tf.tile()函数
  5. swift for循环_Swift | 实战一个简单的素数计算器demo
  6. Mobile Web调试工具Weinre
  7. [oracle原]访问局域网内出现“ORA-12541:TNS:无监听程序”
  8. 可以多次使用同一个hbitmap吗_求婚钻戒和结婚钻戒可以是同一个吗?意义戴法各不同,别胡乱混淆...
  9. JAVA中对集合排序
  10. mac苹果电脑使用耳机听不到声音
  11. mapbox创建空白底图
  12. 北京建筑大学计算机学院岑孝鹏,北京建筑大学
  13. 水处理设备网关,生活污水处理设备网关。
  14. ionic4.x仿京东 - 10.2.确认订单-去结算跳到确认订单(返回特定页面),确认订单页面布局
  15. 实用的CAD技巧,你也可以成为大神!
  16. Window平台的eclipse连接linux的hadoop集群
  17. samba服务器如何配置
  18. 关于线性稳压器的基本知识全面解析
  19. 获取省市区geoJson数据(精确到县、镇)用于echarts实现地图数据可视化
  20. 什么是国网综能服务集团虚拟电厂?——安科瑞 严新亚

热门文章

  1. 罗马数字转换成数字java_C趣味编程百例(31)将阿拉伯数字转换为罗马数字
  2. kotlin中mainactivity无法直接调用xml中的控件_使用52North 客户端接口调用OGC WPS服务...
  3. mfc从mysql中读取数据类型_在MFC中使用SQlite数据库读取数据
  4. 计算机所有数据的表示方式都是用,计算机数据表示
  5. mysql新加不了数据库_MySQL数据库之mysql增加新用户无法登陆解决方法
  6. 软件构造学习笔记-实验3
  7. 7-1 多数组排序 (12 分)三种做法(冒泡排序 ; 重写sort方法 ;利用sort和栈)
  8. DFS和BFS总结和代码演示(详解)
  9. Redis流量控制策略
  10. 本地Jupyter连接远程linux服务器