方法一:
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxx=105;
const int inf=0x7ffffff;
int w[maxx][maxx];
int e[maxx][maxx];
int dist[maxx];
int p[maxx];
int d[maxx][maxx];
int n,m;
int vis[maxx];
int ans;
void Dijstra(int u){for(int i=0;i<=n;i++){dist[i]=inf;}int mincost=0;memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++){if(u!=i){dist[i]=e[u][i];p[i]=u;}}vis[u]=1;dist[u]=0;for(int i=1;i<=n;i++){int temp=inf;int t=u;for(int j=1;j<=n;j++){if(!vis[j]&&dist[j]<temp){temp=dist[j];t=j;}}if(t==u)break;vis[t]=1;for(int j=1;j<=n;j++){if(e[t][j]<inf){if(!vis[j]&&dist[j]>dist[t]+e[t][j]){dist[j]=dist[t]+e[t][j];p[j]=t;}}}}
}
void Min_dist(){ans=inf;for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){if(e[k][i]!=inf){int temp=e[k][i];e[k][i]=inf;Dijstra(k);e[k][i]=temp;if(ans>dist[i]+temp){ans=dist[i]+temp;}}}}
}
int main(){while(cin>>n>>m){for(int i=0;i<=n;i++){dist[i]=inf;for(int j=0;j<=n;j++){e[i][j]=inf;d[i][j]=w[i][j]=inf;}}for(int i=0;i<m;i++){int a,b,cost;cin>>a>>b>>cost;if(w[a][b]>cost){w[a][b]=w[b][a]=cost;d[a][b]=d[b][a]=cost;e[a][b]=e[b][a]=cost;}}Min_dist();if(ans>=inf){cout<<"It's impossible."<<endl;}else{cout<<ans<<endl;}}return 0;
}
/*
3 3
1 2 1
2 3 1
1 3 1
3 3
1 2 1
1 2 3
2 3 1
*/


方法二:Floyd算法
#include<iostream>
#include<cstdio>
#define INF 0x3f3f3f
using namespace std;
int w[110][110],d[110][110];
int n,m;
void floyd()
{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++){if(ans>d[i][j]+w[i][k]+w[k][j]){ans=d[i][j]+w[i][k]+w[k][j];}}}//k为环的最大编号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];}}}}if(ans==INF){printf("It's impossible.\n");}else{//输出最小环的权值 printf("%d\n",ans);}
}
int main()
{while(~scanf("%d %d",&n,&m)){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){d[i][j]=INF;w[i][j]=INF;}}int a,b,c;while(m--){scanf("%d %d %d",&a,&b,&c);if(w[a][b]>c) d[a][b]=d[b][a]=w[a][b]=w[b][a]=c;}floyd();}return 0;
}/*
3 3
1 2 1
2 3 1
1 3 1
3 3
1 2 1
1 2 3
2 3 1
*/


这是我在做题和学习中总结出来的,如果存在什么问题或错误,请指出!谢谢!

最小环算法求解(Dijkstra算法+Floyd算法)相关推荐

  1. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  2. (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理与介绍

    这一篇博客以一些OJ上的题目为载体.整理一下最短路径算法.会陆续的更新... 一.多源最短路算法--floyd算法 floyd算法主要用于求随意两点间的最短路径.也成最短最短路径问题. 核心代码: / ...

  3. 图的应用—求解最短路径(BFS、Dijkstra和Floyd算法)

    BFS算法虽然可以求解最短路径问题,但是需要注意的是该算法只能求解非带权图的单源最短路径问题,或者说带权值相同且为1的图单源最短路径问题. 1.图的邻接矩阵存储结构定义 #define MaxVerN ...

  4. (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法

    一.floyd 1.介绍 floyd算法只有五行代码,代码简单,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3),可以求多源最短路问题. 2.思想: Floyd算法的基本思想如下:从任意 ...

  5. 数据结构(六):图的概念、存储方式、基本操作、最小生成树、最短路径、有向无环图、关键路径 | Prim、Kruskal算法 | BFS、Dijkstra、Floyd算法 | 拓扑排序 | 求关键路径

    文章目录 第六章 图 一.图 (一)图的定义 (二)图逻辑结构的应用 (三)无向图.有向图 (四)简单图.多重图 (五)顶点的度.入度.出度 (六)顶点-顶点的关系描述 (七)连通图.强连通图 (八) ...

  6. 最短路径算法——Dijkstra and Floyd算法

    一.     前言:     这个古老的算法应该耳熟能详了吧,但是我自从从学校出来到现在,最短路径算法都没有实际运用过,最近在一个GIS项目中总算用到了,于是乎把教材重温了下,同时查阅了网上很多的资料 ...

  7. 【POJ/算法】 3259 Wormholes(Bellman-Ford算法, SPFA ,FLoyd算法)

    Bellman-Ford算法 Bellman-Ford算法的优点是可以发现负圈,缺点是时间复杂度比Dijkstra算法高.而SPFA算法是使用队列优化的Bellman-Ford版本,其在时间复杂度和编 ...

  8. 坐在马桶上看算法:Dijkstra最短路算法

                                                             [坐在马桶上看算法]算法7:Dijkstra最短路算法 上周我们介绍了神奇的只有五行的 ...

  9. A*算法求解迷宫问题(算法讲解与证明、python实现与可视化)

    目录 一.引入 二.具体细节 1.BFS(Breadth First Search) 2.Dijkstra(Uniform Cost Search) 3.启发式(Heuristic search) 4 ...

  10. 弗洛伊德算法c语言path,Floyd算法(弗洛伊德算法)

    算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...

最新文章

  1. 数据库备份与还原处理
  2. webpack 安装使用(1)
  3. 互联网协议 — OSPF 开放式最短路径优先协议
  4. 怎么删除计算机c盘应用程序,如何删除C盘的垃圾文件!!
  5. C++substr()用法
  6. activemq网络桥接_ActiveMQ –经纪人网络解释–第3部分
  7. STM32学习之路-SysTick的应用(时间延迟)
  8. mariadb驱动下载教程_性能测试教程[3] nmon analyser
  9. js全局变量和局部变量名称一样_微信小程序的全局变量、页面变量,你真的掌握了?...
  10. android学习笔记---39_采用Service实现电话监控器,刻录打电话者的声音后通过socket上传到服务端
  11. session保存密码_年薪百万之路--第六十四天 Cookie操作与session操作
  12. C语言PIC16 serial bootloader和C#语言bootloader PC端串口通信程序
  13. 算法提高 盾神与条状项链(静态链表)
  14. 7-7 六度空间 (30分)
  15. php 全等 性能,在PHP中,相等(==)和全等(===)的含义是一样的。
  16. 单片机继电器控制实验程序C语言,用单片机通过继电器来控制电热水器的实验...
  17. python中pd是什么意思_python pd
  18. MPI MPI_Bcast (广播)用法详解
  19. tf_Course6循环神经网络
  20. 【工程测试与训练】使用BiSeNetv2测试、训练cityscapes数据集、训练自己的数据集

热门文章

  1. re.sub()用法详解
  2. 计算机专业专业课的准备
  3. 一文读懂 RoIPooling、RoIAlign 和 RoIWarp
  4. 基于深度学习的三维姿态估计
  5. 干货 | OpenCV中KLT光流跟踪原理详解与代码演示
  6. 通讯波形记录——I2S、I2C、Uart、SPI
  7. js创建对象的几种方法及继承
  8. Linux Ubuntu从零开始部署web环境及项目 -----tomcat+jdk+mysql (二)
  9. PHP问题 —— Deprecated: Function ereg_replace() is de
  10. Unity3d多线程