最短路径算法源程序代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#define JiedianNum 6 //最大结点数
#define NameLenght 3 //节点名字长度
#define Infinity 10000 //若节点间没有路径距离设定为Infinity
char*JiedianNameFile="jiedianname.txt";
//图的顶点--节点名
char*JiedianPathFile="jiedianpath.txt"; //边--节点间的连接关系
char*MinPathDataFile="minpath.txt";
//最短路径数据
/********************************************************/
/* 从文件中读入结点数据
*/
/* 函数参数:
*/
/* char jiedian[][]:存放节点名的数组
*/
/* int *NodNum:指针变量,指向存放节点个数的变量*/
/* 输入数据:文本数据文件:JiedianNameFile */
/* 文件数据格式:
*/
/* <节点个数>
*/
/* <节点名>
*/
/* 输出数据:指从该函数中带回到调用函数的数据,包括:*/
/* jiedian[][]--节点名称
*/
/* NodeNum--节点名的个数
*/
/* 返回值:数据读入是否成功的标志
*/
/* 0--失败1--成功
*/
/********************************************************/
int InputJiedianNode(char
jiedian[][NameLenght],int*NodeNum )
{int i,n;
FILE *fp;
if(!(fp=fopen(JiedianNameFile,"r")))
{ printf("节点数据文件不存在\n");
getch();
return(0);
}
fscanf(fp,"%d",&n);
if(!n)
{ printf("文件中无节点数据!\n");
getch();
return(0);
}
for(i=0;i fclose(fp); *NodeNum=n; return(1); } /********************************************************/ /* 从文件中读入最短路径数据*/ /* 函数参数: */ /* int dist[][]:节点间最短路径的值 */ /* int Path[][]:节点间最短路径结点数据 */ /* int *NodNum:指针变量,表示读入数据的多少*/ /* 输入数据:数据文件:MinPathDataFile */ /* 文件数据格式:二进制数据,数据存放顺序:*/ /* <节点个数n> 值> /* 输出数据:指从该函数中带回到调用函数的数据,包括:*/ /* jiedian[][] */ /* Path[][] */ /* NodeNum */ /* 返回值:数据读入是否成功的标志 */ /* 0--失败1--成功 */ /********************************************************/ int InputMinPath(int dist[][JiedianNum],int Path[][JiedianNum],int*NodeNum) {int n; FILE *fp; if(!(fp=fopen(MinPathDataFile,"rb"))) { printf("最小路径数据文件不存在!\n"); getch(); return(0); } fread(&n,sizeof(int),1,fp); fread(dist,sizeof(int),n*n,fp); fread(Path,sizeof(int),n*n,fp); fclose(fp); *NodeNum=n; return(1); } /********************************************************/ /* 查找节点名 */ /* 函数参数: */ /* char str[][]:存放节点名的数组 */ /* int n:str中数据的行数,即节点名的个数*/ /* char *p:指针变量,表示需要查找的节点名*/ /* 输入数据:全部函数参数均为输入数据 */ /* 输出数据:返回值作为函数的输出数据 */ /* 查找成功:被查找的节点名在数组str中的序号*/ /* 查找失败:-1,表示被查找的节点名未出现在数组中*/ /********************************************************/ int search(char str[][NameLenght],int n,char