1、 char *info; /该弧的相关信息;template struct _MGraph T vexsMAX_VERTEX_NUM; ArcCell arcsMAX_VERTEX_NUMMAX_VERTEX_NUM; int vexnum; int arcnum; int kind;typedef int PathMatrix_1MAX_VERTEX_NUMMAX_VERTEX_NUM; / 路径矩阵,二维数组typedef int ShortPathTableMAX_VERTEX_NUM; / 最短距离表,一维数组typedef int PathMatrix_2MAX_VERTEX_NUM
2、MAX_VERTEX_NUMMAX_VERTEX_NUM; / 3维数组typedef int DistancMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM; / 2维数组class MGraphpublic: _MGraph mgraph; bool visitedMAX_VERTEX_NUM; void CreateGraph(); /v是图的顶点集 vr是图的边集 /构造函数/ void DestroyGraph(); /析构函数销毁图 int LocateVex (T u); /图存在,图中存在顶点u 则返回该顶点在图中的位置 bool CreateUDN();
3、/构造无向网 bool (*VisitFunc)(T v); /访问顶点v的方式 void ShortestPath_DIJ(int v0,PathMatrix_1 &P,ShortPathTable &D); void ShortestPath_FLOYD(PathMatrix_2 &P,DistancMatrix &void MGraph:CreateGraph()/ok CreateUDN();bool MGraphCreateUDN()/ok/构造无向网 int i , j ,w; T v1, v2; coutmgraph.vexnummgraph.arcnum ;请输入各个景点 fo
4、r(i = 0;imgraph.vexsi; i+) /初始化邻接矩阵 for(j = 0;jj+) if(i=j) mgraph.arcsij.adj = 0; else mgraph.arcsij.adj = infinity; mgraph.arcsij.info = false; mgraph.arcnum; /构造邻接矩阵 coutv2w; int m = LocateVex(v1); int n = LocateVex(v2); mgraph.arcsmn.adj = w;/ mgraph.arcsnm.adj = w;v2, v1 mgraph.kind = 1; return
5、true;int MGraphLocateVex(T u)/ok for(int i = 0 ;MAX_VERTEX_NUM; if(u = mgraph.vexsi) return i; return -1;/#endifShortestPath_FLOYD(PathMatrix_2 &D)/ 用Floyd算法求有向网G中各对顶点v和w之间的最短路径Pvw及其带权长度Dvw/ 若Pvwu为TRUE,则u是从v到w当前求得最短路径上的顶点。 int u,v,w,i; for(v = 0;vv+) /各对结点之间初始已知路径及距离 for(w = 0;ww+) Dvw = mgraph.arcs
6、vw.adj;/ 顶点v到顶点w的直接距离 for(u = 0;uu+) Pvwu = false;/路径矩阵初值 if(Dvwinfinity) /从v到w有直接路径 Pvwv = Pvww = true;/由v到w的路径经过v和w两点 for(u = 0; for(v = 0; for(w = 0; if(Dvu+DuwDvw) /从v经u到w的一条路径更短 Dvw = Dvu+Duw;/ 更新最短距离 for(i = 0; Pvwi = Pvui|Puwi;/从v到w的路径经过从v到u和从u到w的所有路径 MGraph g;void Welcome()/欢迎函数endl; 欢迎光临南通大
7、学 南通大学计算机科学与技术学院 校园导航系统为你服务 制作人: system(pause);clsvoid Goodbye()感谢您的使用,再见!void Map()/校园平面图函数这是南通大学的校园平面图! 南通大学校园平面图 北 北门 西操场 二食堂 综合楼 超市 西 一食堂 门 英语角 图书馆 教 学 楼 1-4 计算机楼 教学楼6-9 方肇周楼 湖 纺化楼 南门 欢迎来到美丽的南通大学主校区! StartGuide();void StartGuide()/开始导航函数 char choice;- A.查看校园平面图 B.查询最短路径 C.查询景点信息 D.退出导航系统 请输入你要进行
8、的操作:choice; switch(choice) case AMap();break;BShort_Floyd(); break;C system( SearchInformation(); break;DGoodbye(); default:coutc; while(m3)请输入登录密码:password; if(c=password) cout- 密码正确 进入管理系统 自动跳转中. else -密码错误!还有2-m次机会 m+;void AddPoint()请创建校园导游图. g.CreateGraph(); Select();int opekind;void opeshow()*
9、菜 单 * 1. 创建景点图(数组存储结构) 2. 每一对景点之间的最短路径 3. 退出请选择操作:void Short_Floyd() MGraph0 & opekind4) if (opekind=1)请选择有向网 else if (opekind=2) g.ShortestPath_FLOYD(p,d); /求每对顶点间的最短路径各景点点最短距离路径的矩阵: for(i = 0;g.mgraph.vexnum; for(j = 0; coutdij cout if(i != j) /避免同一顶点之间距离的输出 coutg.mgraph.vexsi到g.mgraph.vexsj的最短距离为
10、:游园路线: /避免同一顶点之间距离的输出由经过: for(k = 0;kk+) if(pijk = 1) coutg.mgraph.vexsk /for else程序运行结束,Bye-Bye! break; /if opeshow(); /while Goodbye();void SearchInformation()选择你想查询的景点名称.A.西操场。B.一食堂。C.教育超市。D.综合楼。E.图书馆。F.计算机楼。G.纺化楼。H.湖。I.二食堂。J.英语角。请选择.正在查询请稍后. Sleep(3000);西操场是同学们活动最多的操场,是运动会举行的地方. case一食堂,吃饭的地方.超市,同学们一般的生活用品都可以买到,不过比较贵.综合楼,街舞社一般在此活动.E图书馆,期中期末的时候想找到一个位置太难了.F计算机楼,现教中学的所在地,又称方肇周楼.G纺化楼,纺院学生上课的地方.H湖,学校里最美的地方.I二食堂,吃饭的地方.J英语角,早晨可以听到朗朗读书声. default: StartGuide();void Select() A.导航使用者 B.系统管理员 C.退出此系统 请选择你的操作:StartGuide();In
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2