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); } }
发表评论
-
图的割点tarjan---zoj_1119
2011-10-24 23:00 1261http://acm.zju.edu.cn/on ... -
BFS与双向BFS---zoj_1505
2011-10-09 17:14 1676http://acm.zju.edu.c ... -
静态treap+线段树---zoj_2112
2011-09-29 23:06 1734http://acm.zju.edu ... -
NIM博弈游戏,SG函数---zoj_3084,zoj_2083
2011-09-23 23:00 1340Nim游戏是两个人进行的游戏有如下规则: ... -
多重背包--zoj_2156
2011-09-14 11:10 893首先介绍经典的三种背包问题,0-1背包,完全 ... -
模式串匹配---KMP
2011-08-31 20:49 1307朴素的的模式串匹配算法通常要在向前移动文本指针 ... -
八数码问题(A*&&双向BFS)---zoj_1217
2011-08-30 22:13 1702题目地址:http://acm.zju.edu.cn/onli ... -
ac自动机以及它上面的DFA
2011-08-08 23:04 2527AC自动机(Aho-Corasick)主要用 ... -
二分图最大匹配(匈牙利算法)--zoj1516,1525,2223
2011-07-20 22:36 1209二分图G(E,V)将点集合V分成两个部分L,R ... -
网络最大流(EK)---zoj_1734
2011-07-19 16:34 2179网络最大流是图论中的一个典型问题,为了精确的定 ... -
trie和前缀检查---zoj_2876
2011-07-13 23:03 890trie树是一种多叉树,广泛用于字典检索。如 ... -
位图bitmap
2011-07-13 21:08 948bitmap是一种广泛使用的数据结构,主要用在 ... -
LAC和RMQ的转化---zoj_3195
2011-07-12 22:35 1103我擦。。纠结了好久啊,从SF到TLE,先总结2 ... -
LAC的tarjan(离线)算法---zoj_1141
2011-07-08 17:52 1690LCA就不解释了,这里主要再次复习一下LC ... -
笛卡尔树以及treap---zoj_2243
2011-07-07 15:52 2886zoj_2243笛卡 ... -
线段染色,矩形切割,离散化---zoj_2301,zoj_1128
2011-06-24 22:32 1409染色问题:在一维坐标轴上(最右端为M),有N ... -
线段树---zoj_1610
2011-06-22 21:06 786线段树是一种二叉树的拓展,在线段树每个节点中 ... -
快速排序(qsort)
2011-06-16 17:03 799快速排序是一种高效的非稳定排序,它的基本思路 ... -
斐波那契散列
2011-06-16 16:38 3108斐波那契散列法其实是一种特殊的乘法散列,先来看乘法 ... -
强连通分支(scc)---tarjan
2011-06-15 16:17 1311本文大量 ...
相关推荐
"用Dijkstra算法求图中单源最短路径" Dijkstra算法是一种常用的图搜索算法,用于解决单源最短路径问题。单源最短路径问题是指从一个出发顶点到所有可达顶点的最短路径问题。Dijkstra算法的原理是通过将图中的每个...
单源最短路径问题在图论中是一个经典问题,它旨在找出从图中一个特定顶点(源点)到其他所有顶点的最短路径。在这个场景中,我们提到的"单源最短路径vc源码"是用C++编程语言实现的一个贪心算法解决方案,该算法在...
单源最短路径问题在计算机科学中是一个经典且重要的图论问题,主要目的是找到图中一个指定源节点到其他所有节点的最短路径。这个问题在路由、网络优化、任务调度等多个领域都有广泛应用。本篇文章将深入探讨单源最短...
Floyd-Warshall算法是一种动态规划方法,它不仅可以解决单源最短路径问题,还可以找出图中任意两个顶点之间的最短路径。该算法通过构建一个VxV的矩阵,表示所有可能的路径距离,然后在每一步中尝试通过增加一个新的...
Floyd-Warshall算法由罗伯特·弗洛伊德和伦纳德·沃瑟曼在1962年提出,它不仅解决了单源最短路径问题,还能找出图中任意两点之间的最短路径。此算法基于动态规划,对所有可能的中间节点进行尝试,以找到最佳路径。 ...
解决单源点最短路径问题的方法有很多,例如Dijkstra算法和Floyd-Warshall算法。Dijkstra算法是一种贪心算法,它通过每次选择当前未访问顶点中距离源点最近的一个来逐步构建最短路径。 **Dijkstra算法的基本步骤**:...
3. **Floyd-Warshall算法**:虽然Floyd-Warshall主要用来解决所有对之间的最短路径问题,但它也可以用于单源最短路径。这个算法通过动态规划,逐步考虑增加中间节点,逐步完善所有可能的最短路径。对于每个节点对,...
图的判断、图的拓扑排序、单源最短路径以及求最大生成树是图论中的核心算法,它们在很多实际问题中有着广泛的应用,如网络设计、任务调度、交通规划等。 首先,我们来探讨“图的判断”。在编程中,图通常用邻接矩阵...
- **Floyd-Warshall 算法**:虽然主要用于解决任意两点间的最短路径问题,但也可以用于解决单源最短路径问题。它是一种动态规划算法,通过构建一个二维数组来逐步计算所有可能的路径。 **MADlib** 是一个开源库,...
5. **单源最短路径**:在图论中,寻找从一个特定源节点到所有其他节点的最短路径。Dijkstra算法是一种贪心策略,每次扩展当前路径中最短的边,直到到达所有节点。而Floyd-Warshall算法则使用动态规划来求解所有节点...
1. **Dijkstra算法**:Dijkstra算法是最常用的求解单源最短路径的算法,它保证了找到的路径是局部最优的,即每次选择当前未访问节点中距离源节点最近的一个。这种方法适用于边的权重非负的情况。 2. **Bellman-Ford...
单源最短路径问题在计算机科学,特别是图论与算法设计中是一个核心议题。这个问题的目标是从图中的一个特定源节点出发,找到到达所有其他节点的最短路径。这个概念广泛应用于网络路由、交通规划、社交网络分析等多个...
4. **Floyd-Warshall算法**:另一种解决单源最短路径的方法,尤其适用于所有顶点对之间路径的求解。它通过动态规划策略,逐步更新每个顶点对之间的最短路径,直到遍历所有中间顶点。 5. **Bellman-Ford算法**:如果...
常见的单源最短路径算法有Dijkstra算法、Bellman-Ford算法和Floyd-Warshall算法。Dijkstra算法适用于非负权重的图,以贪心策略逐步扩展最短路径树;而Bellman-Ford算法则能处理包含负权重边的图,通过松弛操作逐步...
其次,Dijkstra算法由荷兰计算机科学家艾兹格·迪科斯彻提出,主要用于寻找单源最短路径。Dijkstra算法采用贪心策略,每次选择当前未访问节点中距离源点最近的一个加入到最短路径集合中。它保证了路径的正确性,但不...
首先,Dijkstra算法是一种解决单源最短路径问题的贪心算法。它通过每次选择当前未访问节点中距离源节点最短的一条路径进行扩展。这个过程会持续直到到达目标节点或遍历完所有节点。在C语言中,我们可以使用优先队列...
单源最短路径问题是一个在图论中至关重要的计算问题,它涉及寻找从图中的一个特定源节点到所有其他节点的最短路径。这个问题在许多领域都有广泛的应用,如交通规划、网络路由、生物信息学以及社交网络分析等。在这些...
Dijkstra算法是一种用于解决带权图中单源最短路径问题的经典算法。其核心思想是从起始节点出发,逐步构建一个树形结构,树中的每一条边代表已知的最短路径。具体步骤如下: 1. **初始化**: 设置起点到自身的距离为0...
这个问题可以转化为图论中的单源最短路径问题。 2. **需求分析** - 程序需要能够计算任意两点之间的路径长度,并计算每个点的偏心度。偏心度是图中一个点到其最远顶点的距离,用于衡量该点在整个图中的中心性。 ...