题目描述:
有向单源最短路径问题(Floyd算法)

输入格式
第1行:2个空格分开的整数n(2<=n<=500)和m(10<=m<=20000),分别表示图的顶点数和边数。
第2..m+1行:每行3个空格分开的整数i, j, w。i表示一条边的起点。j表示终点,w表示权值。
第m+2行:2个整数s,t(1<=s,t<=n),表示指定的顶点。

输出格式
第一行:最小距离
第二行:最短路径(从起点到终点的序列,用1个空格分开)

输入格式:

5  7
1 2 10
1 4 30
1 5 100
2 3 50
3 5 10
4 3 20
4 5 60
1 5

输出格式:

60
1 4 3 5

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define INFINITY 65535
#define MaxVertexNum 500
int G[MaxVertexNum][MaxVertexNum],path[MaxVertexNum][MaxVertexNum] = {0},
D[MaxVertexNum][MaxVertexNum];
int s, t;
int n, m;
void BuildGraph() {int V, W;int V1, V2, Weight;scanf("%d%d", &n, &m);for (V = 1; V <= n; V++)for (W = 1; W <= n; W++) {G[V][W] = INFINITY;}    for (V = 1; V <= m; V++) {scanf("%d%d%d", &V1, &V2, &Weight);G[V1][V2] = Weight;//注意:这里指的是有向图path[V1][V2] = V1;}
}
void Find_path(int x) {if (path[s][x] == 0)return;Find_path(path[s][x]);printf("%d ", x);
}
bool Floyd() {int i, j, k;for (i = 1; i <= n; i++)for (j = 1; j <= n; j++) {D[i][j] = G[i][j];}      for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++)if (D[i][k] + D[k][j] < D[i][j]) {D[i][j] = D[i][k] + D[k][j];if (i == j && D[i][j] < 0)return false;path[i][j] = path[k][j];}return true;
}
int main() {BuildGraph();Floyd();scanf("%d%d", &s, &t);printf("%d\n", D[s][t]);printf("%d ", s);Find_path(t);return 0;system("pause");
}

C语言实现Floyd算法相关推荐

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

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

  2. dijkstra算法和floyd算法(C语言)

    dijkstra算法: /* 邻接表存储 - 无权图的单源最短路算法 *//* dist[]和path[]全部初始化为-1 */ void Unweighted ( LGraph Graph, int ...

  3. Dijkstra算法、Floyd算法的思想和实现(C语言)

    前言 如果您还不了解Dijkstra算法和Floyd算法,我建议您先跳过前言,直接学习算法的步骤和实现,再回过头阅读前言. 整理Dijkstra算法后发现,其本质就是在求第n步最短路径时,直接从第n- ...

  4. [图] Floyd算法|佛洛依德 - 任意两点的最短路径 - C语言实现

    文章目录 原理 核心代码 代码 path[][]数组解释 完整代码 原文链接:https://www.yuque.com/cppdev/algo/bgt4ea 原理 [Floyd算法]用动态规划的思想 ...

  5. floyd算法_最短路径的算法:Floyd算法

    点击箭头处"蓝色字",关注我们哦!! 算法 最短路径的算法-Floyd算法 ● ○ ● Shortest Path Algorithm - Floyd Algorithm ● ○ ...

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

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...

  7. 最短路径:Dijkstra算法和Floyd算法

    一.Dijkstra算法(单个顶点到其他顶点的最短距离) 定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层 ...

  8. 最短路径--Floyd算法

    Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被 ...

  9. 最短路径Dijkstra算法和Floyd算法整理、

    转载自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最短路径-Dijkstra算法和Floyd算法 Dijks ...

最新文章

  1. Paddle下的Tensor运算以及简单回归问题
  2. iphone用计算机显示器,苹果显示器接普通电脑怎么操作【详细介绍】
  3. 触发器无法启动分布式事务。
  4. 【Hibernate】Hibernate中查询表名、字段名以及字段类型等信息
  5. python大作业爬虫_Python大作业---微博爬虫及简单数据分析
  6. ASP.NET 2.0 Club Web Site Starter Kit 补丁
  7. VALSE学习(十七):VALSE 2019报告总结
  8. python的基本函数图像_python绘制基本初等函数图像
  9. 深度学习之注意力机制(Attention Mechanism)和Seq2Seq
  10. ssh 使用新法:公网(合法 ip)用户访问内网(私有 ip)服务器(http,ftp,sshd,cvs...),内网的朋友不妨一看。
  11. 宏重定义 头问题重定义解决办法
  12. css 径向渐变实现渐变小圈
  13. 艰难时世的赚钱之道:淘金iPhone App (一)
  14. 百度推广建立推广计划和推广单元技巧
  15. vc中定时器并非多线程
  16. 基于MT6757/MT6763平台Flashlight_Tuning_SOP介绍
  17. Google Earth Engine(GEE)——逐年批量下载sentinel-2多波段影像
  18. 【行测】“逻辑推理”聂佳课程笔记——3. 类比推理
  19. PS运行提示 please uninstall and reinstall the product
  20. 胜为(shengwei) PEC-2027 台式机PCI-E转ESATA3+SATA3阵列卡 降级 raid1 修复rebuild

热门文章

  1. VS2017下安装fltk库——C++程序设计原理与实践图形编程指南
  2. Java实验报告4:第二题银行账户类型
  3. amazeui学习笔记--css(常用组件10)--导航条Topbar
  4. 强叔侃墙_NAT_nopat示例
  5. 华为eNSP防火墙NAT地址转换之NAT-NOPAT
  6. 小程序图片缓存策略(不改代码更换OSS图片)
  7. c++ 之动态库与静态库区别
  8. 怎么下载不能下载的东西
  9. 力扣—1818.绝对差值和
  10. 树洞外链更新至2.2-支持本地/远程储存,新增用户系统