1、更改图的信息可以由主函数changegraph以及其他函数可以实现。 3详细设计(1)主要的操作界面的显示以及无向网操作void initgraph(graph *ga) int i,j; ga-n=9;e=11; for( i=0;in;i+) vexsi.num=i; strcpy(ga-vexs0.name,西门); strcpy(ga-vexs0.introduce,学校的正大门,设有公交站vexs1.name,风雨篮球场vexs1.introduce,vexs2.name,田径场vexs2.introduce,举办运动会,平时体育跑步锻炼等vexs3.name,京元食堂vexs3.i
2、ntroduce,新食堂vexs4.name,苍霞湖畔vexs4.introduce,戏称“分手湖”,景色宜人vexs5.name,思源楼vexs5.introduce,学校王牌土木的教学区vexs6.name,图书馆vexs6.introduce,是大学城最高的标志性建筑vexs7.name,北教区vexs7.introduce,北校区集中的教学楼vexs8.name,禾堂餐厅vexs8.introduce,旧食堂 for(i=0; for(j=0;jedgesij=1000; ga-edges01=1;edges12=2;edges13=5;edges24=4;edges34=9;edge
3、s45=1;edges48=1;edges56=5;edges57=7;edges78=1;edges67=9;edgesji=ga-edgesij;(2)确定顶点是否存在已经顶点是否已经被访问过来确定路径void Create_graph(graph *ga) int i,j,k,w; printf(请输入顶点数和边数:n scanf(%d %d,&(ga-n),&e);请输入景点编号,景点名字,景点介绍,建立信息表: scanf(%dvexsi.num); gets(ga-vexsi.name); gets(ga-vexsi.introduce); for(i=0; for(j=0;=ga
4、- ga- for(k=0;ke;k+) printf(请输入%d条边的景点序号i,j和长度:,k+1);%d %d %di,&j,&w);edgesij=w;edgesji=w;void print(graph ga)ga.n; for(j=0;,ga.edgesij); if(j+1=ga.n) printf(void visit(graph ga) int a;请输入景点编号:a); int i; if(a=ga.vexsi.num)景点编号为%d n,ga.vexsi.num);景点名称为 puts(ga.vexsi.name);景点介绍为 puts(ga.vexsi.introduc
5、e); break; if(i=ga.n)printf(无此点n(3)得出景点间的最短路径void shortestpath_djst(graph ga)void shortestpath_floyd(graph ga) int i,j,k,v,u,w,d3535,p353535; for(v=0;vv+) for(w=0;ww+) dvw=ga.edgesvw; for(u=0;uu+) pvwu=0; if(dvw1000) pvwv=1; pvww=1; for(u=0; for(v=0; for(w=0; if(dvu+duwdvw) dvw=dvu+duw; for(i=0; pvw
6、i=pvui|puwi; n请输入出发点和目的地编号:k,&j);nn while(kga.n|jga.n)n输入的编号不存在n请重新输入编号:%s,ga.vexsk.name); if(pkju & k!=u &j!=u)-,ga.vexsu.name);,ga.vexsj.name);nnn总长度为%d千米nnn,dkj);(4)得到景点之间的所有路径void path(graph c,int m,int n,int k) int s,x=0; int t; t=k+1; if(dk=n & k8) for(s=0;s,c.vexsds.name); %snn else s=0; whil
7、e(sc.n) if(c.edgesdks1000)&(visiteds=0) visiteds=1; dk+1=s; path(c,m,n,t); visiteds=0; s+; void allpath(graph c) int k,i,j,m,n;nn请输入您要查询的两个景点的编号: m=locatevex(c,i); n=locatevex(c,j); d0=m;c.n; visitedk=0; visitedm=1; path(c,m,n,0);(5)删除边int delarc(graph &ga) int m,n,v0,v1; if(ga.e=0)图中已经无顶边,无法删除 retu
8、rn 1;n请输入要删除的边的起点和终点的编号:v0,&v1); m=locatevex(ga,v0); if(m0)此顶点%d已删除,v0); n=locatevex(ga,v1); if(n,v1); ga.edgesmn=1000; ga.edgesnm=1000; ga.e-;int enarc(graph &ga) int m,n,distance;请输入边的起点和终点编号,权值:m,&n,&distance); while(mga.n|n输入错误,请重新输入:n);if(locatevex(ga,m)此节点%d已经删除,m); return 1;if(locatevex(ga,n)
9、,n);ga.edgesmn=distance;ga.edgesnm=ga.edgesmn;return 1;4调试分析内容包括:a调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;b算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;c经验和体会等。5用户使用说明 通过主菜单提示,选择出你所想要知道的信息,然后通过输入节点来代替景点,从而得到景点间的所有路径,最短路径等其他信息。6测试结果 (1)操作的主界面(2)学校景点的介绍(3)学校景点从西门的禾堂餐厅的所有路径所有路径(4)学校景点从西门的禾堂餐厅的所有路径最短路径(5)图的更改的界面(6
10、)边的删除界面展示7附录#define MAX 100 /数据类型的定义#includeiostreamusing namespace std;int visited35;int d35;struct views int num; char name10; char introduce100;typedef views datatype;typedef struct datatype vexsMAX; int edgesMAXMAX; int n,e;graph;void initgraph(graph *ga)/主要的操作界面的显示以及无向网操作int locatevex(graph ga,int v) / /查找景点在图中的序号 if(v=ga.vexsi.num)return i; return -1;void shortestpath_djst(graph ga)void path(graph c,int m,int n,int k)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1