/*
*求有向网中的任意两点的最短路径
*弗洛伊德算法的核心是 运用一个path二维数组 和一个A二维数组
*path数组用来保存中间路径经过的节点
*A数组用来保存任意两个顶点之间的最短路径长度
*最后输出A数组运用了递归输出的思想
*先初始化path数组和A数组
*运用三层循环 (算法的核心) 计算任意两点之间的最短路径长度 将经过的节点的下标存储在path数组中去
*递增的思想
*创建一个有向网 输出一个临接矩阵
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
#define VERTEXNUM 100//最大顶点数
#define NAME_SIZE 255//字符串的最大长度
#define MAX_INT 32726 //权重最大值
typedef int Statu;//返回值的数据类型
typedef char*VertexType;//字符串的数据类型
typedef int ArcType;//权值数组的数据类型
typedef struct amgraph
{
VertexType vexs[VERTEXNUM];//图的顶点数组
ArcType arcs[VERTEXNUM][VERTEXNUM];//图的权值的二维数组
int n;//图的顶点数
int e;//图的边数
}AMGraph;//图的结构体
int path[VERTEXNUM][VERTEXNUM];//用于保存进过的中间路径的节点的下标
int A[VERTEXNUM][VERTEXNUM];//经过的路径节点的权值
void main()
{
test();//测试函数
}
void test();//测试函数
Statu create_DN(AMGraph*G);//创建有向网
int Locate_vex(AMGraph*G,VertexType vex);//定位函