Floyd算法(不记录路径)
2016-08-23 21:25
281 查看
/********************************************************** *@time 2016/08/23 20:06 *@place DHU.13.5005 *description floyd算法,只算出所有点到所有点的距离而不记录路径 *************************************************************/ #include<cstdio> #include<algorithm> #define MAX_NUM 1<<15 /********************************************************************* *@函数名 Floyd *@paramter int* ori_Paths 路径的集合 *@Parameter int num_Of_Node 节点的个数 *@返回值 int* Floyd算法结果 ********************************************************************/ int* Floyd(int* ori_Paths,int num_Of_Node) { int* new_Paths=(int*)malloc(num_Of_Node*num_Of_Node*sizeof(int)); for(int i=0;i<num_Of_Node*num_Of_Node;i++) new_Paths[i]=ori_Paths[i]; for(int k=0;k<num_Of_Node;k++) { for(int i=0;i<num_Of_Node;i++) { for(int j=0;j<num_Of_Node;j++) { if(new_Paths[i*num_Of_Node+j]>(new_Paths[i*num_Of_Node+k]+new_Paths[k*num_Of_Node+j]))//判断i到j经过k是否比直达更近 { new_Paths[i*num_Of_Node+j]=new_Paths[i*num_Of_Node+k]+new_Paths[k*num_Of_Node+j]; } } } } return new_Paths; } /********************************************************************* *@函数名 inti *@Parameter int num_Of_Node 节点的个数 *@返回值 int* 初始化后的结果 *@description 初始化路径,将所有路径的值置为正无穷,表示目前所有的点为孤点, * 将节点到自身的距离置为0 ********************************************************************/ int *inti(int num_Of_Node) { int* paths=(int*)malloc(num_Of_Node*num_Of_Node*sizeof(int)); for(int i=0;i<num_Of_Node;i++) { for(int j=0;j<num_Of_Node;j++) { paths[i*num_Of_Node+j]=MAX_NUM; if(i==j) paths[i*num_Of_Node+j]=0; } } return paths; } int main() { int num_Of_Node; int num_Of_Route; printf("Please Input number of nodes and routes:"); scanf("%d %d",&num_Of_Node,&num_Of_Route); int* paths=inti(num_Of_Node); printf("Please Input number all route:\n"); for(int i=0;i<num_Of_Route;i++) { int start_Node,end_Node,length; scanf("%d %d %d",&start_Node,&end_Node,&length); paths[start_Node*num_Of_Node+end_Node]=length; paths[end_Node*num_Of_Node+start_Node]=length; } int* new_Paths=Floyd(paths,num_Of_Node); for(int i=0;i<num_Of_Node;i++) { for(int j=0;j<num_Of_Node;j++) { if(i!=j) printf("%d->%d=%d\n",i,j,new_Paths[i*num_Of_Node+j]); } } } /* 6 9 0 1 3 0 3 4 0 5 5 1 2 1 1 5 5 2 3 5 3 1 3 4 3 3 4 5 2 */ /* 5 7 0 1 5 0 4 7 1 2 4 4 2 8 1 3 2 2 3 6 4 3 1 */
相关文章推荐
- Floyd算法求最短路径并记录路径
- Floyd算法(记录路径)
- Floyd两种记录路径的方法
- POJ - 3984 迷宫问题 —— BFS记录路径
- 【URAL 1635】Mnemonics and Palindromes(区间DP+记录路径)
- 转载只为记录经典之<内核控制路径>
- 新年趣事之打牌(01背包+记录路径)
- [Qt][Floyd算法] 动态规划求解最短行驶路径 源码及演示程序
- Floyd算法求所有点对之间的最短路径
- hdu 1385 Minimum Transport Cost--Floyd算法+点权值+记录路径
- Hrbust-1316-移动 II(广度优先搜索 路径记录)
- js保存当前路径(cookies记录)
- HDU 1385 Minimum Transport Cost (floyd算法,求最短路径)
- 最短路径—Dijkstra算法和Floyd算法
- poj 迷宫问题(路径记录)(DFS,BFS)
- 文件存储的不同路径记录
- dijkstra算法记录路径 C++程序
- java io学习记录(路径分隔符)
- poj2264 最短路径+记录路径+字符组合+递归
- 最短路径—Dijkstra算法和Floyd算法