2015年大二上-数据结构-图-2-(4)-Floyd算法
2016-03-02 11:21
337 查看
/* *Copyright (c) 2014,烟台大学计算机学院 *All rights reserved. *文件名称:Annpion.cpp *作者:王耀鹏 *完成日期:2016年3月2日 *版本号:v1.0 * *问题描述:Floyd算法 *输入描述:图 *输出描述:Floyd算法 */ #include<stdio.h> #include<malloc.h> #include "Graph.h" #define MaxSize 100 void Ppath(int path[][MAXV],int i,int j) //前向递归查找路径上的顶点 { int k; k=path[i][j]; if(k==-1) return ; printf("%d,",k); Ppath(path,k,j); } void Dispath(int A[][MAXV],int path[][MAXV],int n) { int i,j; for(i=0; i<n; ++i) for(j=0; j<n; ++j) { if(A[i][j]==INF) printf("从%d到%d没有路径\n",i,j); else { printf(" 从%d到%d=>路径长度:%d 路径:",i,j,A[i][j]); printf("%d,",i); //输出路径上的起点 Ppath(path,i,j); //输出路径上的中间点 printf("%d\n",j); //输出路径上的终点 } } } void Floyd(MGraph g) { int i,j,k,A[MAXV][MAXV],path[MAXV][MAXV]; for(i=0; i<g.n; ++i) for(j=0; j<g.n; ++j) { A[i][j]=g.edges[i][j]; path[i][j]=-1; } for(k=0; k<g.n; ++k) for(i=0; i<g.n; ++i) for(j=0; j<g.n; ++j) { if(A[i][j]>A[i][k]+A[k][j]) { A[i][j]=A[i][k]+A[k][j]; path[i][j]=k; } } Dispath(A,path,g.n); } int main() { MGraph g; int A[4][4]= { {0, 5,INF,7}, {INF,0, 4,2}, {3, 3, 0,2}, {INF,INF,1,0} }; ArrayToMat(A[0], 4, g); Floyd(g); return 0; }
注:例程中的测试图
运行结果:
相关文章推荐
- LeetCode题目难度分布(含面试频率及使用的数据结构与算法)
- 常见数据结构复杂度
- 数据结构与算法面试总结
- 6-2-二叉树(二叉链表存储)-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版
- 2015年大二上-数据结构-图-2-(3)-Dijkstra算法
- CLRS 14.2如何扩张数据结构
- 6-1-二叉树顺序存储结构-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版
- 数据结构-单向有头不循环链表基本实例
- 数据结构与算法分析 学习笔记——最大子序列求和问题
- 网易云课堂 数据结构01-复杂度2 Maximum Subsequence Sum
- python 数据结构
- 有序二叉树的实现
- 【Educational Codeforces Round 6E】【线段树 dfs序】New Year Tree 子树颜色修改子树颜色数
- 数据结构(15)--哈夫曼树以及哈夫曼编码的实现
- 单向线性链表的实现
- 数据结构之排序
- VBA教程初级(二):数据结构
- 《数据结构》只设置尾指针而不设置头指针的讯循环链表的合并
- 剑指offer之数据结构
- 【数据结构】复杂链表的复制