博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Floyd算法---模板
阅读量:4046 次
发布时间:2019-05-25

本文共 872 字,大约阅读时间需要 2 分钟。

           Floyd算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。

        注意:其实很多题目不是直接问你floyd怎么求最短路径,而是要你利用floyd的动态规划思想解决类似floyd的问题。

        Floyd算法可以算边权值非负的最短路径问题。下面给出算法模板

#include
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
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];}

转载地址:http://buyci.baihongyu.com/

你可能感兴趣的文章
adb command not found
查看>>
Xcode 启动页面禁用和显示
查看>>
【剑指offer】q50:树中结点的最近祖先
查看>>
二叉树的非递归遍历
查看>>
【leetcode】Reorder List (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Linked List Cycle (python)
查看>>
【leetcode】Candy(python)
查看>>
【leetcode】Clone Graph(python)
查看>>
【leetcode】Sum Root to leaf Numbers
查看>>
【leetcode】Pascal's Triangle II (python)
查看>>
java自定义容器排序的两种方法
查看>>
如何成为编程高手
查看>>
本科生的编程水平到底有多高
查看>>
AngularJS2中最基本的文件说明
查看>>
从头开始学习jsp(2)——jsp的基本语法
查看>>
使用与或运算完成两个整数的相加
查看>>
备忘:java中的递归
查看>>
DIV/CSS:一个贴在左上角的标签
查看>>
Solr及Spring-Data-Solr入门学习
查看>>