校园导游图C++.doc_第1页
校园导游图C++.doc_第2页
校园导游图C++.doc_第3页
校园导游图C++.doc_第4页
校园导游图C++.doc_第5页
免费预览已结束,剩余9页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

题目13 图(校园导游图)*1、问题描述制作陶瓷学院的校园导游图,游客通过终端可询问:(1)从某一景点到另一景点的最短路径。(2)游客从公园进入,选取一条最佳路线3,使游客可以不重复地游览各景点,最后回到出口(出口就在入口处旁边)2、要求(1)将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,边上的权值表示距离。为此图选择适当的数据结构。(2)把各种路径都显示给游客,由游客自己选择游览路线。(3)画出景点分布图于屏幕上。3、实现提示(1)第一实际是最短路径问题,如果有几条路径长度相同,可选择途径景点较少的路径提供给游客。(2)第二问可采用深度优先搜索,如果有多种路径可选择,则选择带权路径最小的路线提供给游客。 #include#include#includeusing namespace std;#define MAX_INT 10000#define MAX 20int visitedMAX=0;int p1MAX;/前驱顶点int cost;int pathMAXMAX,shortestMAXMAX;/用path记录从i到j的最短路径上点j的前驱景点的序号struct vexchar name20;char serial30;char intro200;struct graphvex v15;int arc1515;int vnum;class Touristmapspublic:void display(graph); /查看所有景点信息void scanf(graph,char*); /查看某个景点信息void add(graph &); /增加景点void start(graph); /初始化景点信息int shortestdistance();/用佛洛依德算法求最短路径void floyed(); /用佛洛依德算法求void print(int,int);/打印两个景点间的路径及最短距离void DFS(int,int);/深度遍历;void Touristmaps:display(graph gh)int i;int count=0;cout 编序 名称 简介:gh.vnum;for(i=0;ro;cout景点编号count: gh.vi.serial roendl;count+;infile.close();coutgh.vnum;for(int i=0;ro;if(strcmp(,select)=0|strcmp(gh.vi.serial,select)=0)obj=i;exist=1;if(!exist)cout未找到要查询的相关信息!endl;elsecout您要查询的信息如下:endl;cout景点编序:gh.vobj.serialendl;cout景点名称:endl;cout景点信息:roendl;infile.close();system(pause);system(cls);void Touristmaps:add(graph &gh)int i,j,count,f;ifstream infile(graph.txt,ios:in);if(!infile)cout文件打开失败!gh.vnum;f=gh.vnum;for(i=0;ro;ofstream outfile2(graph.txt,ios:out);coutcount;gh.vnum=gh.vnum+count;outfile2gh.vnumendl;for(i=0;if;i+)outfile2gh.vi.serial roendl;outfile2.close();infile.close();ofstream outfile(graph.txt,ios:app);cout请依次输入景点编序, 名称, 简介:endl;for( i=f;igh.vnum ;i+)cout第i+1ro;outfilegh.vi.serial roendl;outfile.close();ifstream infile1(linjiejuzhen.txt,ios:in);for(i=0;if;i+)for(j=0;jgh.arcij;infile1.close();ofstream outfile1(linjiejuzhen.txt,ios:out);for(i=f;igh.vnum;+i) for(j=0;jgh.vnum;+j)gh.arcij=MAX_INT;gh.arcji=MAX_INT;cout与景点相关信息的输入endl;for(i=f;igh.vnum;i+)cout请输入与景点相邻的所有权值(没有路径时输入10000)endl;for(j=0;jgh.vnum & j!=i;j+)cout请输入与景点权值gh.arcij;gh.arcji=gh.arcij;for(i=0;igh.vnum;i+)outfileendl;for(j=0;jgh.vnum;j+)outfile1gh.arcijendl;outfile1.close();cout添加景点信息成功g.vnum;infile.close();int i,j;coutg.vnum-1)数字编号ij;if(i=g.vnum|i=g.vnum|j0)cout输入信息错误!nn;coutg.vnum-1)数字编号ij;elsefloyed();print(i,j);system(pause);system(cls);return 1;void Touristmaps:floyed() int i,j,k;graph g;ifstream infile1(graph.txt,ios:in);infile1g.vnum;infile1.close();ifstream infile(linjiejuzhen.txt,ios:in);for(i=0;ig.vnum;i+)for(j=0;jg.arcij;infile.close();for(i=0;ig.vnum;i+)for(j=0;jg.vnum;j+)shortestij=g.arcij;pathij=-1;for(k=0;kg.vnum;k+)for(i=0;ig.vnum;i+)for(j=0;j(shortestik+shortestkj)shortestij=shortestik+shortestkj;pathij=k;/用path记录从i到j的最短路径上点j的前驱景点的序号pathji=k;void Touristmaps:print(int i,int j) int a,b;a=i;b=j;cout要查询的两景点间最短路径是:nn;cout逆序输出所经过的景点的路径:;if(shortestij!=MAX_INT)if(ij)cout=0)cout-pathij;/把i到j的路径上所有经过的景点按逆序打印出来if(ij)j=pathij;elsei=pathji;cout-aendlendl;coutab最短距离是:shortestabendl;elsecout=0) coutpathij;/把i到j的路径上所有经过的景点按顺序打印出来if(ij)j=pathij;elsei=pathji;coutbendl;coutab的最短距离是:shortestabendlendl;elsecoutg.vnum;for(i=0;ro;infile1.close();ifstream infile(linjiejuzhen.txt,ios:in);for(i=0;ig.vnum;i+)for(j=0;jg.arcij;infile.close();p1p10+ = x;/x加入路径if(x=b)/找到一条路径则输出+n;cout第n条途径:endl;for(i=1;ip10;i+);cout 路径长度:cost;coutendl;return;for(j=0;jg.vnum;j+)if(g.arcxj!=10000&! visitedx) /x到j有路,并且x到j没走过cost+=g.arcxj;/记录总的路径visitedx = 1;/标记已走DFS(j,b);p10-;/去掉jcost-=g.arcxj;/恢复visitedx = 0;/恢复void Touristmaps:start(graph g)char x;coutx;if(x=y|x=Y)ofstream outfile(graph.txt,ios:out);g.vnum =0;outfileg.vnum;outfile.close();ofstream outfile1(linjiejuzhen.txt,ios:out);outfile.close();cout初始化成功!endl;elsecout你没有初始化!endl;system(pause);system(cls);void main()graph GH;int x,y;char select10;Touristmaps map;while(1)cout endl;cout 欢迎使用景德镇陶瓷学院校园导游系统 endl;cout endl;cout endl;cout 1.查看所有信息 2.查某景点信息 endl;cout endl;cout 3.添加景点信息 4.两点间所有路径 endl;cout endl;cout 5.两点间最短路径 6.初始化景点信息 endl;cout endl;cout 0.退出导游系统 endl;cout * endl;cout 学校景点概括 endl;coutGH.vnum;for(int i=0;iGH.vi.serialGH.GH.ro;coutsetw(21)iGH.endl;infile.close();cout *endl;coutchoose;switch(choose)case 1:map.display(GH);break;case 2:coutselect;map.scanf(GH,select);break;case 3:map.add(GH);break;case 4:ifstream infile(graph.txt,ios:in);infileGH.vnum;infile.close();coutGH.vnum-1)数字编号xy;if(x=GH.vnum|x=GH.vnum|y0) cout

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论