图的最短路径算法的实现

上传人:jiups****uk12 文档编号:90650892 上传时间:2019-06-14 格式:DOC 页数:8 大小:56.04KB
返回 下载 相关 举报
图的最短路径算法的实现_第1页
第1页 / 共8页
图的最短路径算法的实现_第2页
第2页 / 共8页
图的最短路径算法的实现_第3页
第3页 / 共8页
图的最短路径算法的实现_第4页
第4页 / 共8页
图的最短路径算法的实现_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《图的最短路径算法的实现》由会员分享,可在线阅读,更多相关《图的最短路径算法的实现(8页珍藏版)》请在金锄头文库上搜索。

1、图的最短路径算法的实现C语言#include#include#include#define INF 32767#define MAXV 100#define BUFLEN 1024typedef struct char name100;char info1000; VertexType;typedef struct VertexType vexs10; int arcs100100;int vexnum,arcnum; MGraph;/图结构 char* getFile(char fileName,char *array,int &count)FILE *file;char bufBUFLEN

2、;int len=0;/文件读取的长度 file=fopen(fileName,rt);/打开graph.txt的信息 if(file=NULL)/文件为空的处理办法 printf(Cannot open file strike any key exit!n);exit(1);while(fgets(buf,BUFLEN,file) len=strlen(buf); arraycount=(char*)malloc(len+1); if(!arraycount) break; strcpy(arraycount+,buf);fclose(file);return array;void getI

3、nfo(int &vex,int &arc,char *array)char buf_ch100;char *ch100; char *tokenp;int str_count=0,str_len=0;tokenp=strtok(array, );strcpy(buf_ch,tokenp);while(tokenp!=NULL)str_len=strlen(tokenp); chstr_count=(char*)malloc(str_len+1); strcpy(chstr_count+,tokenp); tokenp=strtok(NULL, );for(int i=0;istr_count

4、;i+)if(i%2=1)chistrlen(chi)-1=0;sscanf(chi,%d,&arc);elsesscanf(chi,%d,&vex); MGraph setVertexTypeInfo(MGraph g,char *arrayVer)int str_count=0;char buf_ch100;char *ch100;char *tokenp;for(int i=0;ig.vexnum+1&arrayVerg.vexnum;i+)int str_len=0;tokenp=strtok(arrayVeri, );strcpy(buf_ch,tokenp);while(token

5、p!=NULL) str_len=strlen(tokenp); chstr_count=(char*)malloc(str_len+1); strcpy(chstr_count+,tokenp);tokenp=strtok(NULL, );for(int i1=2;i1str_count;i1+)if(i1%2=1)chi1strlen(chi1)-1=0;strcpy(g.vexsi1/2-1.info,chi1);elsestrcpy(g.vexsi1/2-1.name,chi1);return g;/设置无向图的基本信息 MGraph setMGraphInfo(MGraph g,ch

6、ar *arrayMGraph,int &count)int str_count=0;char buf_ch100;char *ch100;char *tokenp;for(int i4=g.vexnum+1;i4count;i4+)int str_len=0;tokenp=strtok(arrayMGraphi4, );strcpy(buf_ch,tokenp);while(tokenp!=NULL) str_len=strlen(tokenp); chstr_count=(char*)malloc(str_len+1); strcpy(chstr_count+,tokenp);tokenp

7、=strtok(NULL, );char *info8;/需要匹配的字符串集合 for(int i2=0;i2g.vexnum;i2+)infoi2=g.vexsi2.name;int G5050;/邻接矩阵初始化 for(int i3=0;i3g.vexnum;i3+)for(int j=0;jg.vexnum;j+)Gi3j=INF;int temp100=0;/存储距离信息 int temp_count=0;/距离计数器 int templeft100=0;/起始地址的代号信息 int templeft_count=0;/起始地址计数器 int tempright100=0;/终点地址的

8、代号信息 int tempright_count=0;/终点地址的计数器 for(int k=0;kstr_count;k+)if(k%3=0)for(int m=0;mg.vexnum;m+)if(strcmp(infom,chk)=0)templefttempleft_count+=m;else if(k%3=1)for(int m=0;mg.vexnum;m+)if(strcmp(infom,chk)=0)temprighttempright_count+=m;else if(k%3=2)chkstrlen(chk)-1=0;sscanf(chk,%d,&temptemp_count+)

9、;for(int i5=0;i5temp_count;i5+)Gtemplefti5temprighti5=tempi5;for(int i6=0;i6g.vexnum;i6+)/建立图的邻接矩阵for(int j=0;jg.vexnum;j+)g.arcsi6j=Gi6j;return g;void DispMat(MGraph g)int i,j;for(i=0;ig.vexnum;i+)for (j=0;j,g.vexsk.name);ppath(g,path,k,j);void DisPath(MGraph g,int AMAXV,int pathMAXV,int i,int j)if

10、 (Aij=INF)if (i!=j) printf(从 %s 到 %s 没有路径n,g.vexsi.name,g.vexsj.name);elseprintf(%s-,g.vexsi.name);ppath(g,path,i,j);printf(%s,g.vexsj.name);printf(t路径长度为:%dn,Aij); void Floyd(MGraph g,int p,int q)/弗洛伊德算法int AMAXVMAXV,pathMAXVMAXV;int i,j,k,n=g.vexnum;for (i=0;in;i+)for (j=0;jn;j+) Aij=g.arcsij;path

11、ij=-1;for (k=0;kn;k+) for (i=0;in;i+) for (j=0;j(Aik+Akj) Aij=Aik+Akj; pathij=k; printf(最短路径为:n);DisPath(g,A,path,p,q); /输出最短路径int main()int vex,arc;printf( 欢迎来到江西理工大学 n);printf( n);MGraph g;/图的定义char *array1;/存储顶点和边数数据信息 char *arrayVer10;/存储地点信息 char *arrayMGraphMAXV;/存储关于图的信息 int count=0;char fileName=D:数据结构shujujiegouyigraph.txt;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号