交通运输系统.doc
如有侵权,请联系网站删除,仅供学习与交流交通运输系统【精品文档】第 4 页数据结构实验报告交通指南系统题目:假设以一个带权有向图表示某一区域的公交线路网,图中顶点代表一些区域中的重要站点,弧长代表已有的公交线路,弧上的权表示该线路上的票价(或搭乘所需时间),试设计一个交通指南系统,指导前来咨询者以最低的票价或最少的时间从区域中的某一站点到达另一站点。#include <iostream>using namespace std;struct ArcCellint adj; /存放弧长 bool *info; /是否用过该弧struct _MGraph char vexs20; /存放站点ArcCell arcs2020; /<i,j>int vexnum;int arcnum;typedef int Path202020; typedef int Distanc2020; class MGraph /没用私有成员public:_MGraph mgraph;/void DestroyGraph(); /析构函数销毁图int LocateVex (char u); / 返回顶点在图中的位置bool CreateDN(); /构造有向网void ShortestPath_FLOYD(Path &P,Distanc &D);bool MGraph:CreateDN()/构造有向网int i,j ,w;char v1, v2;cout<<"请输入站点个数,直接线路的条数: "cin>>mgraph.vexnum>>mgraph.arcnum ;cout<<"n请输入各站点名: "for(i = 0;i<mgraph.vexnum;i+)/构造顶点向量cin>>mgraph.vexsi;for(i = 0;i<mgraph.vexnum;i+)/初始化邻接矩阵for(j = 0;j<mgraph.vexnum;j+)if(i=j)mgraph.arcsij.adj = 0;elsemgraph.arcsij.adj = 20000; /infinity; mgraph.arcsij.info = false;for(i = 0;i<mgraph.arcnum;i+) /构造邻接矩阵cout<<"n请输入一条线路的起点,终点,距离(公里): "cin>>v1>>v2>>w;int m = LocateVex(v1);int n = LocateVex(v2);mgraph.arcsmn.adj = w; / <v1, v2>的权值return true; void MGraph:DestroyGraph()for(int i = 0 ;i<mgraph.vexnum;i+)for(int j = 0;j<mgraph.vexnum;j+)if(mgraph.arcsij.info)delete mgraph.arcsij.info;mgraph.arcsij.info = false;mgraph.vexnum = 0;mgraph.arcnum = 0;int MGraph:LocateVex(char u)for(int i = 0 ;i<20;i+)if(u = mgraph.vexsi)return i;return -1;void MGraph:ShortestPath_FLOYD(Path &P,Distanc &D)/求每对顶点间的最短路径/ 用Floyd算法求有向网G中各对顶点v和w之间的最短路径Pvw及其带权长度Dvw/ 若Pvwu为TRUE,则u是从v到w当前求得最短路径上的顶点。int u,v,w,i;for(v = 0;v<mgraph.vexnum;v+)for(w = 0;w<mgraph.vexnum;w+)Dvw = mgraph.arcsvw.adj;/ 顶点v到顶点w的直接距离for(u = 0;u<mgraph.vexnum;u+)Pvwu = false; /路径矩阵初值if(Dvw<20000) /从v到w有直接路径Pvwv = Pvww = true;/由v到w的路径经过v和w两点for(u = 0;u<mgraph.vexnum;u+)for(v = 0;v<mgraph.vexnum;v+)for(w = 0;w<mgraph.vexnum;w+)if(Dvu+Duw<Dvw)/从v经u到w的一条路径更短Dvw = Dvu+Duw;/ 更新最短距离for(i = 0;i<mgraph.vexnum;i+) Pvwi = Pvui|Puwi;/从v到w的路径经过从v到u和从u到w的所有路径void main()MGraph g;Path p; / 3维数组Distanc d; / 2维数组int s,t,k;char v1,v2;float sum=0;cout<<"n*欢迎使用交通查询系统*n"<<endl;g.CreateDN();cout<<"n请输入出发站、目的站:"cin>>v1>>v2;s=g.LocateVex (v1);t=g.LocateVex (v2); g.ShortestPath_FLOYD(p,d); if(s!=t) int a=s;cout<<"n由"<<g.mgraph.vexss<<"到"<<g.mgraph.vexst<<"途中经过:"for(k = 0;k<g.mgraph.vexnum;k+)if(pstk = 1)cout<<g.mgraph.vexsk<<" "sum=sum+g.mgraph.arcsak.adj;a=k;cout<<"最短线路总长:"<<sum<<"公里"cout<<"nn*祝您旅途愉快!*"<<endl;g.DestroyGraph();