每一对顶点间最短路径的Floyd算法
- #include<stdio.h>
- #define MAXSIZE 6//带权有向图中顶点的个数
- #define INF 32767
- void Ppath(int path[][MAXSIZE],int i,int j)//前向递归查找路径上的顶点,MAXSIZE为常数
- {
- int k;
- k=path[i][j];
- if(k!=-)
- {
- Ppath(path,i,k);//找顶点vi的前一个顶点vk
- printf("%d->",k);//输出顶点vk序号k
- Ppath(path,k,j);//找顶点vk的前一个顶点vj
- }
- }
- void Dispath(int A[][MAXSIZE],int path[][MAXSIZE],int n)//输出最短路径的函数
- {
- int i,j;
- for(i=;i<n;i++)
- for(j=;j<n;j++)
- if(A[i][j]==INF)//INF为一极大常数
- {
- if(i!=j)
- printf("从%d到%d没有路径!\n",i,j);
- }
- else//从vi到vj有最短路径
- {
- printf("从%d到%d的路径长度:%d,路径:",i,j,A[i][j]);
- printf("%d->",i);//输出路径上的起点序号i
- Ppath(path,i,j);//输出路径上的各中间点序号
- printf("%d\n",j);//输出路径的终点序号j
- }
- }
- void Floyd(int gm[][MAXSIZE],int n)//Floyd算法
- {
- int A[MAXSIZE][MAXSIZE],path[MAXSIZE][MAXSIZE];
- int i,j,k;
- for(i=;i<n;i++)
- for(j=;j<n;j++)
- {A[i][j]=gm[i][j];//A-1[i][j]置初值
- path[i][j]=-;//-1表示初始时最短路径不经过中间顶点
- }
- for(k=;k<n;k++)//按顶点编号k递增的次序查找当前顶点之间的最短路径长度
- for(i=;i<n;i++)
- for(j=;j<n;j++)
- if(A[i][j]>A[i][k]+A[k][j])
- {A[i][j]=A[i][k]+A[k][j];//从vi到vj经过vk时路径长度更短
- path[i][j]=k;//记录中间顶点Vk的编号
- }
- Dispath(gm,path,n);//输出最短路径
- }
- void main()
- {
- int g[MAXSIZE][MAXSIZE]={{INF,,,INF,INF,INF},{,INF,INF,INF,,},{INF,,INF,INF,INF,},
- {INF,INF,INF,INF,INF,INF},{INF,INF,INF,,INF,INF},{INF,INF,INF,,,INF}};
- Floyd(g,MAXSIZE);
- }
输出结果:
每一对顶点间最短路径的Floyd算法的更多相关文章
- 弗洛伊德算法Floyed(求各顶点间最短路径):可打印最短路径
#include <iostream> #include <string> #include <iomanip> using namespace std; #def ...
- 最短路径 - 弗洛伊德(Floyd)算法
为了能讲明白弗洛伊德(Floyd)算法的主要思想,我们先来看最简单的案例.图7-7-12的左图是一个简单的3个顶点的连通网图. 我们先定义两个二维数组D[3][3]和P[3][3], D代表顶点与顶点 ...
- 图的最短路径---弗洛伊德(Floyd)算法浅析
算法介绍 和Dijkstra算法一样,Floyd算法也是为了解决寻找给定的加权图中顶点间最短路径的算法.不同的是,Floyd可以用来解决"多源最短路径"的问题. 算法思路 算法需要 ...
- 数据结构与算法--最短路径之Floyd算法
数据结构与算法--最短路径之Floyd算法 我们知道Dijkstra算法只能解决单源最短路径问题,且要求边上的权重都是非负的.有没有办法解决任意起点到任意顶点的最短路径问题呢?如果用Dijkstra算 ...
- 最短路径之Floyd算法
Floyd算法又称弗洛伊德算法,也叫做Floyd's algorithm,Roy–Warshall algorithm,Roy–Floyd algorithm, WFI algorithm. Floy ...
- 最短路径---Dijkstra/Floyd算法
1.Dijkstra算法基础: 算法过程比prim算法稍微多一点步骤,但思想确实巧妙也是贪心,目的是求某个源点到目的点的最短距离,总的来说dijkstra也就是求某个源点到目的点的最短路,求解的过程也 ...
- 最短路径问题-Floyd算法
概念 最短路径也是图的一个应用,即寻找图中某两个顶点的最短路径长度. 实际应用:例如确定某两个城市间的坐火车最短行车路线长度等. Floyd algorithm 中文名就是弗洛伊德算法. 算法思路:用 ...
- 26最短路径之Floyd算法
Floyd算法 思想:将n个顶点的图G“分成”很多子图 每对顶点vi和vj对应子图Gij(i=0,1,…,n-1和j=0,1,…,n-1) 每对顶点vi和vj都保留一条顶点限于子图Gij中的最短路径P ...
- 最短路径问题——floyd算法
floyd算法和之前讲的bellman算法.dijkstra算法最大的不同在于它所处理的终于不再是单源问题了,floyd可以解决任何点到点之间的最短路径问题,个人觉得floyd是最简单最好用的一种算法 ...
随机推荐
- js遇到问题汇总
1.原生js获取同级的兄弟节点 <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...
- MongoDB入门(3)- MongoDB备份与恢复
1. 备份 MongoDB提供了备份工具,mongodump.exe,在bin目录下,其用法如下: mongodump.exe -h localhost -d database_name -o d:\ ...
- http-反向代理学习
主要是学习了反向代理. 结合公司的方向代理使用,然后与同事进行交流,知识还是需要通过交流才能印象深刻,以后多多交流.
- UVA 10214 Trees in a Wood
https://vjudge.net/problem/UVA-10214 题意:你站在原点,每个坐标位置有一棵高度相同的树,问能看到多少棵树 ans=Σ gcd(x,y)=1 欧拉函数搞搞 #incl ...
- C11内存管理之道:智能指针
1.shared_ptr共享智能指针 std::shared_ptr使用引用计数,每个shared_ptr的拷贝都指向相同的内存,在最后一个shared_ptr析构的时候,内存才会释放. 1.1 基本 ...
- python测试rabbitmq简易实例
生产者 import pika #coding=utf8 credentials = pika.PlainCredentials('guest', '密码') connection = pika.Bl ...
- 【BZOJ】1699 [Usaco2007 Jan]Balanced Lineup排队
[算法]线段树 #include<cstdio> #include<cctype> #include<algorithm> using namespace std; ...
- vue-cli proxyTable中跨域中pathRewrite 怎么用
问:proxyTable 里面的pathRewrite里面的‘^/iclient’:'' 什么意思? 答:用代理, 首先你得有一个标识, 告诉他你这个连接要用代理. 不然的话, 可能你的 html, ...
- 子div设置margin-top使得父div也跟着向下移动
之前在写网页的时候,发现一个小问题,就是子div设置margin-top的时候,父的div也会跟着向下移动.我用代码和图描述一下问题: <span style="font-size:1 ...
- Spring Cloud与Spring Boot的关系
1.Spring Cloud是一个工具集:Spring Cloud是在Spring Boot的基础上构建的,用于简化分布式系统构建的工具集:使架构师在创建和发布微服务时极为便捷和有效. Sp ...