`
plussai
  • 浏览: 90696 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

单源最短路径----FLOYD

阅读更多
  FLOYD用于求图中任意点对的最短路径,DP,时间复杂O(N3),状态转移方程dist[i][j]=min{dist[i][j],dist[i][k]+dist[k][j]},dist[i][j]表示节点i到节点j的最短路径,如果dist[i][j]的值发生改变,path[i][j]=k,表示从节点i到节点j需要连续经过i,k.如path[0][5]=4,path[4][5]=3,path[3][5]=5可以推出从节点0到节点5的路径为0-4-3-5.
#include<iostream>
#include<string.h>
using namespace std;
const int numv=6;
const int maxm=100000;
int dist[numv][numv];
int path[numv][numv];
int cost[numv][numv];
int init()
{
	
	for(int i=0;i<numv;i++)
	for(int j=0;j<numv;j++)
	cost[i][j]=maxm;
	cost[0][0]=0;
	cost[0][2]=10;
	cost[0][4]=30;
	cost[0][5]=100;
	cost[1][1]=0;
	cost[1][2]=10;
	cost[2][2]=0;
	cost[2][3]=50;
	cost[3][3]=0;
	cost[3][5]=10;
	cost[4][4]=0;
	cost[4][3]=20;
	cost[4][5]=60;
	cost[5][5]=0;
	for(int i=0;i<numv;i++)
	for(int j=0;j<numv;j++)
	{
		dist[i][j]=cost[i][j];
		path[i][j]=j;
	}

}
void getShotpath()
{
	for(int k=0;k<numv;k++)
	{
		for(int i=0;i<numv;i++)
		{
			for(int j=0;j<numv;j++)
			{
				if(dist[i][j]>dist[i][k]+dist[k][j])	
				{	
					dist[i][j]=dist[i][k]+dist[k][j];
					path[i][j]=k;	
				}
			}
		}
	}
	
}
void printpath(int a,int b)
{
	int temp=a;
	while(temp!=b)
	{
		cout<<temp<<" ";
		temp=path[temp][b];
	}
	cout<<b<<" "<<endl;
}
int main()
{
	int a,b;
	while(cin>>a>>b)
	{
		if(a==b)
		{
			//cout<<"input again"<<endl;
			//break;
		}
		if(a>5||b>5)
		{	
			cout<<"input again"<<endl;
			break;
		}
		init();
		getShotpath();
		cout<<"shotpath="<<dist[a][b]<<endl;
		printpath(a,b);
	}	
}


分享到:
评论

相关推荐

    用Dijkstra算法求图中单源最短路径

    "用Dijkstra算法求图中单源最短路径" Dijkstra算法是一种常用的图搜索算法,用于解决单源最短路径问题。单源最短路径问题是指从一个出发顶点到所有可达顶点的最短路径问题。Dijkstra算法的原理是通过将图中的每个...

    单源最短路径vc源码(贪心算法)

    单源最短路径问题在图论中是一个经典问题,它旨在找出从图中一个特定顶点(源点)到其他所有顶点的最短路径。在这个场景中,我们提到的"单源最短路径vc源码"是用C++编程语言实现的一个贪心算法解决方案,该算法在...

    单源最短路径(算法 代码)

    单源最短路径问题在计算机科学中是一个经典且重要的图论问题,主要目的是找到图中一个指定源节点到其他所有节点的最短路径。这个问题在路由、网络优化、任务调度等多个领域都有广泛应用。本篇文章将深入探讨单源最短...

    最短路课件 求单源最短路径

    Floyd-Warshall算法是一种动态规划方法,它不仅可以解决单源最短路径问题,还可以找出图中任意两个顶点之间的最短路径。该算法通过构建一个VxV的矩阵,表示所有可能的路径距离,然后在每一步中尝试通过增加一个新的...

    单源最短路径

    Floyd-Warshall算法由罗伯特·弗洛伊德和伦纳德·沃瑟曼在1962年提出,它不仅解决了单源最短路径问题,还能找出图中任意两点之间的最短路径。此算法基于动态规划,对所有可能的中间节点进行尝试,以找到最佳路径。 ...

    实现求解单源点最短路径问题

    解决单源点最短路径问题的方法有很多,例如Dijkstra算法和Floyd-Warshall算法。Dijkstra算法是一种贪心算法,它通过每次选择当前未访问顶点中距离源点最近的一个来逐步构建最短路径。 **Dijkstra算法的基本步骤**:...

    zuiduanlujing.rar_单源最短路径

    3. **Floyd-Warshall算法**:虽然Floyd-Warshall主要用来解决所有对之间的最短路径问题,但它也可以用于单源最短路径。这个算法通过动态规划,逐步考虑增加中间节点,逐步完善所有可能的最短路径。对于每个节点对,...

    图的判断 图的拓扑排序 单源最短路径 求最大生成树

    图的判断、图的拓扑排序、单源最短路径以及求最大生成树是图论中的核心算法,它们在很多实际问题中有着广泛的应用,如网络设计、任务调度、交通规划等。 首先,我们来探讨“图的判断”。在编程中,图通常用邻接矩阵...

    MADlib-基于SQL的数据挖掘解决方案-图算法之单源最短路径.docx

    - **Floyd-Warshall 算法**:虽然主要用于解决任意两点间的最短路径问题,但也可以用于解决单源最短路径问题。它是一种动态规划算法,通过构建一个二维数组来逐步计算所有可能的路径。 **MADlib** 是一个开源库,...

    贪心思想和案例(活动安排问题,0-1背包问题,最优装载,哈夫曼编码,单源最短路径,最小生成树(Prim,Kruskal),汽车加油问题).zip

    5. **单源最短路径**:在图论中,寻找从一个特定源节点到所有其他节点的最短路径。Dijkstra算法是一种贪心策略,每次扩展当前路径中最短的边,直到到达所有节点。而Floyd-Warshall算法则使用动态规划来求解所有节点...

    图-最短路径-可视化.zip

    1. **Dijkstra算法**:Dijkstra算法是最常用的求解单源最短路径的算法,它保证了找到的路径是局部最优的,即每次选择当前未访问节点中距离源节点最近的一个。这种方法适用于边的权重非负的情况。 2. **Bellman-Ford...

    课程设计-单源最短路径.rar

    单源最短路径问题在计算机科学,特别是图论与算法设计中是一个核心议题。这个问题的目标是从图中的一个特定源节点出发,找到到达所有其他节点的最短路径。这个概念广泛应用于网络路由、交通规划、社交网络分析等多个...

    java单源最短路径源程序文件

    4. **Floyd-Warshall算法**:另一种解决单源最短路径的方法,尤其适用于所有顶点对之间路径的求解。它通过动态规划策略,逐步更新每个顶点对之间的最短路径,直到遍历所有中间顶点。 5. **Bellman-Ford算法**:如果...

    单源最短路径_最大团问题_

    常见的单源最短路径算法有Dijkstra算法、Bellman-Ford算法和Floyd-Warshall算法。Dijkstra算法适用于非负权重的图,以贪心策略逐步扩展最短路径树;而Bellman-Ford算法则能处理包含负权重边的图,通过松弛操作逐步...

    三种算法(Floyd、Dijkstra、SPFA)求单源点最短路径。

    其次,Dijkstra算法由荷兰计算机科学家艾兹格·迪科斯彻提出,主要用于寻找单源最短路径。Dijkstra算法采用贪心策略,每次选择当前未访问节点中距离源点最近的一个加入到最短路径集合中。它保证了路径的正确性,但不...

    最短路径-C语言实现版本

    首先,Dijkstra算法是一种解决单源最短路径问题的贪心算法。它通过每次选择当前未访问节点中距离源节点最短的一条路径进行扩展。这个过程会持续直到到达目标节点或遍历完所有节点。在C语言中,我们可以使用优先队列...

    单源最短路径算法设计与分析期终论文

    单源最短路径问题是一个在图论中至关重要的计算问题,它涉及寻找从图中的一个特定源节点到所有其他节点的最短路径。这个问题在许多领域都有广泛的应用,如交通规划、网络路由、生物信息学以及社交网络分析等。在这些...

    dijkstra与floyd方法求最短路径实验报告.docx

    Dijkstra算法是一种用于解决带权图中单源最短路径问题的经典算法。其核心思想是从起始节点出发,逐步构建一个树形结构,树中的每一条边代表已知的最短路径。具体步骤如下: 1. **初始化**: 设置起点到自身的距离为0...

    最短路径-数据结构课程设计报告.pdf

    这个问题可以转化为图论中的单源最短路径问题。 2. **需求分析** - 程序需要能够计算任意两点之间的路径长度,并计算每个点的偏心度。偏心度是图中一个点到其最远顶点的距离,用于衡量该点在整个图中的中心性。 ...

Global site tag (gtag.js) - Google Analytics