Floyd算法求多源最短路径

#include<stdio.h>

int main()
{
	int m, n, i, j, k, t1, t2, t3, e[10][10];
	scanf_s("%d %d", &n, &m);
	for (i = 1; i <= n;i++)
	for (j = 1; j <= n; j++)//Initialize the matrix
	{
		if (i == j)
			e[i][j] = 0;
		else
			e[i][j] = 99999;
	}
	for (i = 1; i <= m; i++)//read the vertex
	{
		scanf_s("%d %d %d", &t1, &t2, &t3);
		e[t1][t2] = t3;
	}

	for (k = 1; k <= n;k++)
	for (i = 1; i <= n;i++)
	for (j = 1; j <= n; j++)
	{
		if (e[i][j] > e[i][k] + e[k][j])
			e[i][j] = e[i][k] + e[k][j];
	}

	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= n; j++)
			printf_s("%d ", e[i][j]);
		printf_s("\n");
	}

	getchar();
	return 0;
}

n代表节点数目,m代表边的数目。输入的时候t1 t2代表两个边,t3代表权值,k代表中间节点,最后就可以输出任意两点之间的最短路径(代码来源于纪磊)。

时间: 2024-07-30 13:43:44

Floyd算法求多源最短路径的相关文章

Floyd 算法求多源最短路径

Floyd算法: Floyd算法用来找出每对顶点之间的最短距离,它对图的要求是,既可以是无向图也可以是有向图,边权可以为负,但是不能存在负环. 基本算法: Floyd算法基于动态规划的思想,以 u 到 v 的最短路径至少经过前 k 个点为转移状态进行计算,通过 k 的增加达到寻找最短路径的目的.当 k 增加 1 时,最短路径要么不边,如果改变,必经过第 k 各点,也就是说当起点 u 到第 k 个点的最短距离加上第 k 个点到终点 v 的最短路径小于不经过第 k 个节点的最优最短路经长度的时候更新

Dijkstra算法求单源最短路径

1.最短路径 在一个连通图中,从一个顶点到另一个顶点间可能存在多条路径,而每条路径的边数并不一定相同.如果是一个带权图,那么路径长度为路径上各边的权值的总和.两个顶点间路径长度最短的那条路径称为两个顶点间的最短路径,其路径长度称为最短路径长度. 最短路径在实际中有重要的应用价值.如用顶点表示城市,边表示两城市之间的道路,边上的权值表示两城市之间的距离.那么城市A到城市B连通的情况下,哪条路径距离最短呢,这样的问题可以归结为最短路径问题. 求最短路径常见的算法有Dijkstra算法和Floyd算法

Floyd算法解决多源最短路径问题

Floyd-Warshall算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭包. Floyd-Warshall算法的时间复杂度为O(N^3),空间复杂度为O(N^2). Floyd-Warshall算法的原理是动态规划: 从i到j,要么是直接从i到j的,要么是从i出发经过中间节点到j的,假设中间节点有k种可能,那么只要求出这k种可能的最小值,即可得到最短路径. d[ i ][ j ]=min{ d[ i ][

SPFA算法与dijkstra算法求单源最短路径的比较

SPFA是运用队列,把所有的点遍历到没有能更新的,点可以重复入队 如题http://www.cnblogs.com/Annetree/p/5682306.html dijkstra是每次找出离源点最近的点确定位置,不可重复确定 如题http://www.cnblogs.com/Annetree/p/5675201.html 这样就导致了SPFA可计算负权值而dijkstra不行 例子如图 1到3 用dijkstra计算为5 用SPFA计算为-2 另外,SPFA可测出负环(如如入队操作超过应有的次

[Python] 弗洛伊德(Floyd)算法求图的直径并记录路径

相关概念 对于一个图G=(V, E),求图中两点u, v间最短路径长度,称为图的最短路径问题.最短路径中最长的称为图的直径. 其中,求图中确定的某两点的最短路径算法,称为单源最短路径算法.求图中任意两点间的最短路径算法,称为多源最短路径算法. 常用的路径算法有: Dijkstra算法 SPFA算法\Bellman-Ford算法 Floyd算法\Floyd-Warshall算法 Johnson算法 其中最经典的是Dijkstra算法和Floyd算法.Floyd算法是多源最短路径算法,可以直接求出图

_DataStructure_C_Impl:Floyd算法求有向网N的各顶点v和w之间的最短路径

#include<stdio.h> #include<stdlib.h> #include<string.h> typedef char VertexType[4]; typedef char InfoPtr; typedef int VRType; #define INFINITY 100000 //定义一个无限大的值 #define MaxSize 50 //最大顶点个数 typedef int PathMatrix[MaxSize][MaxSize][MaxSiz

Dijkstra算法详细(单源最短路径算法)

介绍 对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或许,你曾经感觉它很难,那么,这个时候正适合你重新认识它. Dijkstra能是干啥的? Dijkstra是用来求单源最短路径的 就拿上图来说,假如直到的路径和长度已知,那么可以使用dijkstra算法计算南京到图中所有节点的最短距离. 单源什么意思? 从一个顶点出发,Dijkstra算法只能求一个顶

数据结构与算法问题 单源最短路径 浙大OJ

题目描述: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. 输入: 输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p.最后一行是两个数 s,t;起点s,终点t.n和m为0时输入结束. (1<n<=1000, 0<m<100000, s != t) 输出: 输出 一行有两个数, 最短距离及其花费. 样例输入: 3 2

求单源最短路径两顶点最短距离(BFS)

//(矩阵)求图G中顶点x的第一个临接点,如果有返回其下标,否则返回-1 int FirstNeighbor1(MGraph G,int x){ if(x >= MaxVertexNum) return -1; for(int i = 0;i < MaxVertexNum;++i){ if(G.Edge[x][i] >= 0 && G.Edge[x][i] < MaxDis ) return i; } return -1; } //(矩阵)假设G中顶点y是顶点x的一