1.进一步掌握图的存储,建立和遍历。
2.掌握弗洛伊德算法和迪杰斯特拉算法完成最短路径的有关问题。
3.文件的读写操作的练习与使用。
4.提供校园导游的实用地图。
二. 设计内容
1.以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
2.为来访客人提供图中任意景点相关信息的查询。
3.为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
三.概要设计
1.功能模块图
2.各个模块详细的功能描述。
1.CreateGraph()---从文件中读出景点的信息,并创建无向图。
2.graph()---显示校园平面图,方便游客进行查询。
3.find()---查询任意景点的详细信息。
4.BrowsePath()---迪杰斯特拉算法,用于实现目前所在点到任意一景点的最短路径。
5.ShortestPath()---弗洛伊德算法,用于实现任意两景点间最短路径。
6.main_menu(),secord_menu()---用于实现菜单的显示并接受输入选择。
四.详细设计
1.功能函数的调用关系图
2.各功能函数的数据流程图
3.重点设计及编码
<1>.查询功能的实现。
while(ch<0||ch>=G.vexnum)
{
printf("\\n\你所输入的景点编号不存在!\\n");
printf("请重新输入:");
scanf("%d",&ch);
}
for(i=0;i if(i==ch) printf("\\n %s %s",G.vexs[i].name,G.vexs[i].introduction); } printf("\\n\\n是否继续查询(Y/N)"); getchar(); <2>.从文件中读取信息并储存到图的结构体数组中。 for(i=0;i fscanf(fp,"%s\\n", G.vexs[i].name); fscanf(fp,"%s\\n",G.vexs[i].introduction); } for(i=0;i fscanf(fp,"%d %d",&m,&n); fscanf(fp," %d\\n",&G.arcs[m][n].adj); } <3>。弗洛伊德算法的实现。 for(u=0;u for(v=0;v d[v][w]=d[v][u]+d[u][w]; for(i=0;i } } system("color 3d"); printf("\\n请输入出发点和目的地的编号: "); scanf("%d%d",&k,&j); while(k<0||k>G.vexnum||j<0||j>G.vexnum) { printf("\\n\\n 你输入的景点编号不存在~\\n"); printf("\\n请重新输入出发点和目的地编号:\\n\\n"); scanf("%d%d",&k,&j); printf("\\n\\n"); } printf("\\n\%s",G.vexs[k].name); for(u=0;u printf("--->%s",G.vexs[u].name); printf("--->%s",G.vexs[j].name); printf("\\n\\n\总长为%d米\\n\\n\\n",d[k][j]); printf("按任意健返回!"); 五.测试数据及运行结果 1.正常测试数据和运行结果 2.异常测试数据及运行结果 六.调试情况,设计技巧及体会 1.改进方案 <1>.未实现某一点到其余景点的所有路径,用哈密尔顿遍历即可实现。 <2>.在登录时可实现游客登录和管理员登陆,管理员登陆中需要输入密码,并可对景点信息,路径等进行修改。 2.体会 <1>.应该加强对图的学习和使用,特别是对图的遍历及图的应用中最短路径及关键路径的部分应加强理解与掌握。 <2>.适当掌握课本外知识是很有必要的,例如哈密尔顿图的遍历。 <3>.今后应该加强上机练习,在实践中提高自身编程能力和水平,同时掌握课本知识。 <4>.对界面的设计应加强学习,例如颜色及屏幕大小的变化等。 七.参考文献 《数据结构案例精编》---清华大学出版社 《C Primer Plus》---人民邮电出版社