Floyd算法---模板
来源:互联网 发布:上古卷轴5捏脸数据导入 编辑:程序博客网 时间:2024/06/08 15:16
Floyd算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。
注意:其实很多题目不是直接问你floyd怎么求最短路径,而是要你利用floyd的动态规划思想解决类似floyd的问题。
Floyd算法可以算边权值非负的最短路径问题。下面给出算法模板
#include<cstdio> using namespace std; #define INF 1e9 const int maxn=100+10; int n,m;//点数,边数,点从0到n-1编号 int dist[maxn][maxn];//记录距离矩阵 int path[maxn][maxn];//path[i][j]=x表示i到j的路径上(除i外)的第一个点是x. void init() { for(int i=0;i<n;i++) for(int j=0;j<n;j++) { dist[i][j] = i==j?0:INF;//其实这里d[i][j]应该还要通过输入读数据的 path[i][j]=j; } //读取其他dist[i][j]的值 } void floyd() { for(int k=0;k<n;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(dist[i][k]<INF && dist[k][j]<INF ) { if(dist[i][j]>dist[i][k]+dist[k][j]) { dist[i][j] = dist[i][k]+dist[k][j]; path[i][j] = path[i][k]; } else if(dist[i][j] == dist[i][k]+dist[k][j] &&path[i][j]>path[i][k]) { path[i][j] = path[i][k]; //最终path中存的是字典序最小的路径 } } }
输出路径例程:
printf("Path: %d", u);int beg = path[u][v];while (1){printf("-->%d", beg);if (beg == v) { cout << endl; break; }beg = path[beg][v];}
阅读全文
0 0
- toj2033 floyd算法 模板
- Floyd算法模板
- Floyd算法模板
- floyd算法模板
- floyd算法模板
- Floyd算法模板
- Floyd算法模板
- Floyd-Warshall算法模板
- Floyd算法---模板
- floyd算法模板--打印路径
- 【Eternallyc】模板题-Floyd算法
- Floyd(弗洛伊德)算法 详解+模板
- 最短路径Floyd算法模板
- 最短路(floyd算法)模板
- 图论---POJ 3660 floyd 算法(模板题)
- HDU 2544 --floyd-Warshall算法模板
- ACM模板——Floyd算法
- 最短路径算法模板:Dijkstra/Floyd/Bellman-Ford模板
- shiro学习笔记
- JAVA中JButton常用设置
- 二叉树线索化和遍历的算法
- 链表分割 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以
- 【微信公众平台】自定义菜单的创建、查询和删除。
- Floyd算法---模板
- Robot Framework之Return_From_Keyword
- 最短路(dijkstra)
- spfa+记录路径模板
- beautifulsoup 学习
- web项目权限管理解决方案及shiro框架
- 关键路径
- Linux--vim命令
- 对redis的一些总结