关于对Floyd算法的思索

简介:

这个问题困扰我很久了,终于还是上机得到了证实,实践出真知啊!

将循环的顺序改为倒置一样是正确的【不论是 k,i,j 中的一个或者几个倒置,都是正确的】,如果倒置了就不能理解为:加入前K个点时的最短路,而是理解为每个点加入都是当前最短路。。。


正序之代码:

#include <stdio.h>
#define MAX 999999

int main()
{
	//无向无环图的floyd
	int map[6][6];

	int i,j;
	for(i=0;i<6;i++)
		for(j=0;j<6;j++)
			map[i][j]=MAX;

	//自己到自己的距离是0
	for(i=0;i<6;i++)
		map[i][i]=0;

	//init
	map[1][2]=map[2][1]=10;
	map[1][3]=map[3][1]=4;
	map[2][3]=map[3][2]=5;
	map[2][4]=map[4][2]=2;
	map[4][3]=map[3][4]=1;

	printf("Floyd中......\n");

	//Floyd正式开始,只有四个点
	int k;
	for(k=1;k<=4;k++)
		for(i=1;i<=4;i++)
			for(j=1;j<=4;j++)
				//display
				if(map[i][j]>map[i][k]+map[k][j])
				{
					map[i][j]=map[i][k]+map[k][j];
					printf("已更新:map[%c][%c] = %d\n",i+'A'-1,j+'A'-1,map[i][j]);
				}


	//Floyd结束
	printf("最终:\n");

	for(i=1;i<=4;i++)
		for(j=1;j<=4;j++)
			printf("map[%c][%c] = %d\n",i+'A'-1,j+'A'-1,map[i][j]);
		
	return 0;
}



上面代码描述的图是:


运行结果是:



一倒序:

for(k=4;k>=1;k--)
		for(i=1;i<=4;i++)
			for(j=1;j<=4;j++)



三倒序:

for(k=4;k>=1;k--)
		for(i=4;i>=1;i--)
			for(j=4;j>=1;j--)


相关文章
|
4月前
|
算法
最短路之Floyd算法
最短路之Floyd算法
60 1
|
4月前
|
算法
Floyd 最短路径【学习算法】
Floyd 最短路径【学习算法】
51 0
|
10月前
|
算法
Floyd算法的应用
Floyd算法的应用
54 0
|
1月前
|
算法 Java 测试技术
算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法
这篇文章介绍了基于动态规划法的三种算法:解决背包问题的递归和自底向上实现、Warshall算法和Floyd算法,并提供了它们的伪代码、Java源代码实现以及时间效率分析。
算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法
|
3月前
|
存储 算法 C语言
数据结构学习记录——图-最短路径问题(无权图单源最短路径算法、有权图单源最短路径算法、多源最短路径算法、Dijkstra(迪杰斯特拉)算法、Floyd算法)
数据结构学习记录——图-最短路径问题(无权图单源最短路径算法、有权图单源最短路径算法、多源最短路径算法、Dijkstra(迪杰斯特拉)算法、Floyd算法)
56 1
|
4月前
|
算法
Frogger(Floyd算法)
Frogger(Floyd算法)
|
9月前
|
算法
floyd算法
floyd算法
|
11月前
|
存储 算法
最短路径算法( Dijkstra + Bellman-Ford + SPFA + Floyd)
最短路径算法( Dijkstra + Bellman-Ford + SPFA + Floyd)
153 0
|
算法
转:用一个例子说明Floyd算法
弗洛伊德算法(Floyd&#39;s algorithm)是一种用于求带权图中最短路径的算法,适用于带有正负权边的图(但不能有负环)。这种算法也有时被称为弗洛伊德-沃尔什算法。该算法基于动态规划,其时间复杂度为O(V^3),其中V是图中的顶点数。此外,该算法还可用于检测图中的负环并求出传递闭包。
109 2
|
算法
【路径规划】基于Dijkstra算法及Floyd算法的通信与网络路径规划(Matlab代码实现)
【路径规划】基于Dijkstra算法及Floyd算法的通信与网络路径规划(Matlab代码实现)
106 0