数据结构课程设计-全国交通咨询模拟系统程序设计源代码
全国交通咨询模拟系统源代码

12050741班(郭晓湛,李佳豪,廖川,杨鹤)课题:全国交通系统咨询模拟源程序代码:#include <windows.h>#include <stdio.h>#include <string.h>#include <vector>#include<iostream>#include <malloc.h>#define INF 65535 //定义一个最大数定为无穷值#define MAX 23using namespace std;static int c_number=10;static int k=0;static int v=0,z=0,r=0,t=0;typedef struct search{int c_transer;int c_cost;int c_time;int f_cost;int f_time;}search;search m[20],x[20],n[20];typedef int costAdj[MAX+1][MAX+1];//图邻接矩阵从1开始记数int Path[MAX+1][MAX+1];//图邻接矩阵从1开始记数typedef struct unDiGraph{int numVerts; //结点costAdj cost; //邻接矩阵}unDiGraph,*UNG; //图的定义typedef struct c_edit{char a[10];}c_edit;c_edit add[10];costAdj B,L;//定位函数,输出城市列表,增添城市。
int pr(int i,int j){int h=0;if (j==0){h=i;}else if (j==1){cin>>add[i].a;}switch(h)//运用switch语句。
{case(0):cout<<"";break;case(1) : cout<<"成都 ";break; case(2) : cout<<"西安 ";break; case(3) : cout<<"郑州 ";break; case(4) : cout<<"武汉 ";break; case(5) : cout<<"株洲 ";break;case(6) : cout<<"贵阳 ";break;case(7) : cout<<"柳州 ";break;case(8) : cout<<"广州 ";break;case(9) : cout<<"南宁 ";break;case(10) : cout<<"徐州 ";break;default:cout<<add[i-10].a;}return 1;}//输出城市列表及相应代码void pri(){int i;cout<<" 城市及其代码"<<endl<<endl<<endl;cout<<"****************************"<<endl; for (i=1;i<=c_number;i++){cout<<i<<".";pr(i,0);}cout<<endl<<"***********************"<<endl<<endl<<endl< <endl<<endl<<endl;}//构造带权(费用)图返回首地址G:unDiGraph *CreateCostG(int o)//火车的花费的存贮和编辑功能{unDiGraph *G;int i,j;int a=0,b=0,f,h=1;if(!(G=(unDiGraph *)malloc(sizeof(unDiGraph)))) //为G 分配存储空间。
交通咨询模拟数据结构课程设计

数据结构课程设计报告题目:全国交通咨询模拟一.需求分析1.程序设计任务:从中国地图平面图中选取部分城市,抽象为程序所需要图的结点,并以城市间的列车路线和飞机路线,作为图结点中的弧信息,设计一个全国交通咨询模拟系统。
利用该系统实现两种最优决策:最快到达或最省钱到达。
2. 明确规定:(1)输入形式和输入值的范围:每条飞机弧或者火车弧涉及的信息量很多,包括:起始城市、目的城市、出发时间、到达时间、班次以及费用。
作为管理员要输入的信息包括以上信息,而作为用户或者客户,要输入的信息有起始城市和目的城市,并选择何种最优决策。
(2)输出形式:按用户提供的最优决策的不同而输出不同的信息,其中输出的所搭飞机或火车的班次及其起始地点和终点、起始时间和出发时间还有相关的最优信息,比如最快经多少时间到达、最省钱多少钱到达和最少经多少中转站到达。
(3)程序所能达到的功能a.该系统有供用户选择的菜单和交互性。
可以对城市、列车车次和飞机航班进行编辑,添加或删除。
b.建立一个全国交通咨询系统,该系统具备自动查找任意两城市间铁路、飞机交通的最短路径和最少花费及中转次数最少等功能。
c.初始化交通系统有两种方式,键盘和文档。
二.设计概要1. 算法设计(1)、总体设计(1) 数据存储:城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。
建议把城市信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函数操作。
(2) 数据的逻辑结构:根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的等候时间)或旅费。
(3) 数据的存储结构:采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,宜采用邻接表,以提高空间的存储效率。
这里采用邻接表作为数据的存储结构。
(4) 用不同的功能模块对城市信息和交通信息进行编辑。
添加、修改、删除功能可用菜单方式或命令提示方式。
(完整word版)数据结构课程设计-全国交通咨询系统

X X 学院计算机系《数据结构》课程设计报告书全国交通咨询模拟系统的设计与实现学生姓名:学号:年级专业及班级:指导老师及职称:讲师专业:计算机科学与技术专业提交日期:2011年6月全国交通咨询模拟系统的设计与实现学生:指导老师:(怀化学院计算机系,怀化418008)摘要:该课程设计主要实现了对全国火车及飞机信息的修改和查询,其中主要包括:管理员对火车、飞机信息的操作,其中又包含对两种交通方式的增加和删除操作.旅客用户对两种交通信息的查询,其中飞机信息和火车信息都包含了对两个站点间最短路径方式的查询、最少花费方式的查询以及城市中所有的交通信息的查询.关键词:全国交通咨询;1前言为了完成数据结构的课程设计,为了巩固自己数据结构的知识,也是为了提高自己的编程能力和逻辑思维能力,我选了这道全国交通咨询模拟系统的设计与实现一题。
在对其需求进行分析之后,按照需求分析,逐步完成其各部分的功能实现.对于总的方面来讲,管理员功能实现并不难,而难点在于用户功能中的算法及数据结构中的知识以及编程的细微方面,下面将详细介绍本课程设计的内容.2需求分析2.1 范围2.1。
2 系统概述1.软件名称:全国交通咨询系统V1.02.软件功能:主要的功能有:管理员增删和修改城市站点信息、飞机路线信息、火车路线信息。
3.用户:查询最小耗费路线、查询最短时间路线、查询城市所有路线.4.开发者:2.1.3 文档概述需求分析采用在面向对象的方法,主要使用结构体struct的方法来进行实际的编程,在文档中主要采E—R图和对功能的简单描述的方法来表述系统的需求。
本需求分析的审查者是老师,所以主要是写给老师看的,用来说明我对这个系统的分析情况。
2.2 引用文件无2.3 需求概述2.3。
1 系统目标本系统的总体目标是通过使用该系统,管理员可以对飞机或者火车的信息的简单管理,也方便外出旅客在不同的需求下(如:最少的花费和最短的路程),快速浏览到所要的信息。
数据结构课程设计全国交通咨询系统

数据结构课程设计全国交通咨询系统数据结构课程设计全国交通咨询系统随着交通工具的快速发展,现代人的出行方式更加灵活便捷,交通行业也变得越来越重要。
然而,随之而来的交通拥堵、安全问题和出行效率等问题亟待解决。
因此,交通咨询系统的开发应运而生。
本文介绍一个数据结构课程设计项目——全国交通咨询系统,该系统旨在为用户提供便捷、全面的交通出行信息和服务。
该系统主要包括以下方面的功能:1. 城市选择及路线查询功能用户可选择目的地城市,系统将返回该城市的基本信息,以及从用户当前位置到目的地的交通路线和方案,并提供相应的时间和费用信息。
2. 交通工具查询功能用户可在系统中查询各种交通工具的班次、价格、车次和到达时间等相关信息,以便用户做出最优出行方案。
3. 路况信息查询该系统可实时获取交通状况信息,并展示给用户最新的路况信息。
此外,当用户选择出行方式时,系统可根据实时路况为用户提供最佳出行方案。
4. 预订和购票该系统可为用户提供方便的预订和购票服务。
用户可在线预订和购买机票、火车票和长途汽车票等交通工具,并选择合适的座位和时间。
5. 旅游景点推荐功能该系统可根据用户的出行方案提供适宜的旅游景点推荐。
用户可在系统中了解这些景点的详细信息和交通时间,以便更好地规划自己的行程。
该全国交通咨询系统的实现需要多种数据结构的支持,例如图、树、堆栈、链表、哈希表等。
下面分别讨论每个功能的实现方法和相关数据结构。
1. 城市选择及路线查询功能城市选择及路线查询功能需要通过图的遍历来实现。
图是由顶点和边组成的集合,可以用来表示城市及它们之间的相互关系。
在本系统中,每个城市可以看做一个顶点,每条连接两个城市的路径被视为一条边。
为了实现城市选择及路线查询功能,需要对图进行遍历。
在这个系统中,广度优先搜索算法(BFS)是最佳选择,因为BFS可以给出最近的解决方案。
2. 交通工具查询功能交通工具查询功能需要通过树来实现。
树是由节点和边组成的集合,可以用来表示各种结构化数据。
数据结构课程设计交通咨询系统实验参考代码

数据结构课程设计交通咨询系统实验参考代码#include<stdio.h>#include<stdlib.h>#define MVNum 100//最大顶点数#define Maxint 32767enum boolean{FALSE,TRUE};typedef char VertexType;typedef int Adjmatrix;typedef struct{VertexType vexs[MVNum];//顶点数组,类型假定为charAdjmatrix arcs[MVNum][MVNum];//邻接矩阵,类型假定为int 型}MGraph;int D1[MVNum],P1[MVNum];int D[MVNum][MVNum],P[MVNum][MVNum];/*建立有向图的储存结构*/void CreateMGraph(MGraph * G,int n,int e){//采用邻接矩阵表示法构造有向图G,n、e表示图的当前顶点数和边数int i,j,k,w;for(i=1;i<=n;i++)//输入顶点信息G->vexs[i]=(char)i;for(i=1;i<=n;i++)for(j=1;j<=n;j++)G->arcs[i][j]=Maxint;//初始化邻接矩阵printf("输入%d条边人i、j及w:\n",e);for(k=1;k<=e;k++)//读入e条边,建立邻接矩阵{scanf("%d,%d,%d",&i,&j,&w);G->arcs[i][j]=w;}printf("有向图人存储结构建立完毕!\n");}/*迪杰斯特拉算法*/void Dijkstra(MGraph *G,int v1,int n){//利用迪杰斯特拉算法,求出有向图G的v1顶点到其他顶点v 的最短路径P[v]及权D[v]int D2[MVNum],P2[MVNum];int v,i,w,min;enum boolean S[MVNum];for(v=1;v<=n;v++)//初始化S和D{S[v]=FALSE;//置空最短路径终点集D2[v]=G->arcs[v1][v];//置初始的最短路径值if(D2[v]<Maxint)P2[v]=v1;//v1是v的前趋(双亲)elseP2[v]=0;//v无前趋(双亲)}D2[v1]=0;S[v1]=TRUE;//S集初始时只有源点,距离为0for(i=2;i<n;i++)//其余n-1个顶点{min=Maxint;for(w=1;w<=n;w++)if(!S[w] && D2[w]<min){ v=w;min=D2[w]; }//w顶点离v1顶点更近S[v]=TRUE;for(w=1;w<=n;w++)//更新当前最短路径及距离if(!S[w]&&(D2[v]+G->arcs[v][w]<D2[w])) { D2[w]=D2[v]+G->arcs[v][w];P2[w]=v;}}printf("路径长度,路径\n");for(i=1;i<=n;i++){ printf("%5d",D2[i]);printf("%5d",i); v=P2[i];while(v!=0){printf("<-%d",v);v=P2[v];}printf("\n");}}/*费洛伊德算法*/void Floyd(MGraph *G,int n){//利用费洛伊德算法,求出最短路径int i,j,k;for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(G->arcs[i][j]!=Maxint)P[i][j]=j;elseP[i][j]=0;D[i][j]=G->arcs[i][j];}for(k=1;k<=n;k++){for(i=1;i<=n;i++)for(j=1;j<=n;j++){ if(D[i][k]+D[k][j]<D[i][j]){D[i][j]=D[i][k]+D[k][j];P[i][j]=P[i][k];}}}}void main(){MGraph *G;int n,e,v,w,k;int xz=1;G=(MGraph *)malloc(sizeof(MGraph));printf("输入图中顶点个数和边数n,e:");scanf("%d,%d",&n,&e);CreateMGraph(G,n,e);//建立图的存储结构while(xz!=0){printf("***********求城市之间的最短距离***********\n");printf("================================= =========\n");printf("1.求一个城市到所有城市的最短距离\n");printf("2.求任意的两个城市之间的最短距离\n");printf("================================== ========\n");printf("请选择:1或2,选择0 退出:\n");scanf("%d",&xz);if(xz==2){Floyd(G,n);////调用费洛伊德算法printf("输入源点和终点:v,w:\n");scanf("%d,%d",&v,&w);k=P[v][w];if(k==0)printf("顶点 %d 到 %d 无路径!\n",v,w);else{printf("从顶点 %d 到 %d 最短路径是 %d",v,w,v); while(k!=w){printf("->%d",k);k=P[k][w];//k为v的后继顶点}printf("->%d",k);//输出后继顶点printf("路径长度:%d\n",D[v][w]);}}elseif(xz==1){printf("求单源路径,输入源点v;");scanf("%d",&v);Dijkstra(G,v,n);//调用迪杰斯特拉算法}}printf("结束求最短路径,再见!\n");}。
C++数据结构-全国交通咨询模拟报告

数据结构课程设计报告班级:195182学号:20181003991姓名:钟欢日期:2019.12一、课程设计题目与要求1.课程设计题目:全国交通咨询模拟2.问题描述:出于不同目的的旅客对交通工具有不同的要求。
例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。
编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
3.基本要求:3.1提供对城市信息进行编辑(如添加或删除)的功能。
3.2城市之间有两种交通工具:火车和飞机。
提供对列车时刻表和飞机航班进行编辑(增加或删除)的功能。
3.3提供两种最优决策:最快到达或最省钱到达。
全程只考虑一种交通工具。
3.4旅途中耗费的总时间应该包括中转站的等候时间。
3.5咨询以用户和计算机的对话方式进行。
二、需求分析1.问题描述搭建一个全国交通咨询模拟系统,可以实现简单的人机互动从而达到咨询的效果。
需要完成的功能有,对城市、列车时刻表、航班时刻表进行编辑(手动/文件添加,删除),能够根据出发城市以及到达城市进行相关线路推荐(花费最少线路、耗时最短线路),其中整个线路的耗时总时长包括中转等待时间。
2.程序的功能:2.1维护功能:2.1.1航班操作2.1.2列车操作2.1.3更改密码2.2咨询功能2.2.1选择出行交通工具2.2.2选择要查询的信息:○1查询花费最小的路径○2查询耗时最短的路径2.2.3进行进一步的输入得到所需要的结果三、设计1.设计思想1.1数据结构设计1.1.1逻辑结构设计采用图结构来表示该全国交通网络,用一个结构体来表示时间,结构体内有标准化的(天,时,分)的相关表示以及操作,重载的运算符“-”。
全国交通网络中的城市用结点表示,两个城市之间的航线或者列车线用两个结点之间的边来表示。
城市结点中包含城市名字、城市编号、第一条航线/列车线以及航线/列车线的数目;边结点中包含到达城市名称,指向下一航线/列车线的指针,以及指向该边所指代航线/列车线信息的指针;航班线/列车线信息结点包含航班号/列车号,出发时间,到达时间,花费时间,花费金额。
数据结构《交通咨询系统》完整代码

数据结构《交通咨询系统》完整代码#include#include#include#include#define zuida 32767#define max 20typedef struct lu{int distance;int cost;int time;}lu,lujin[max][max];typedef struct city{char name[20];}citys[max];typedef struct{citys clist;lujin arcs;int c_n,l_n;}Graph;typedef struct{char adjvex;int mincost;int mindistance;int mintime;}closedge;void zairu(Graph *G);void Administer(Graph G);void show(Graph G);int insertcity(Graph *G);int insertlu(Graph *G);int Located(Graph *G, char *p);void baocun(Graph G);int serchlu(Graph *G);int main(){int y,j;Graph G;zairu(&G);//载⼊交通信息while(1){system("cls");printf("\n\n\n\n\n\n");printf("**********************************欢迎使⽤交通咨询系统**************************\n\n"); printf("\t\t\t※※※※※※※※※※※※※※※※※※※※※\n");printf("\t\t\t※※ 1=管理员管理※\n");printf("\t\t\t※※ 2=⽤户咨询路径※\n");printf("\t\t\t※※ 3=显⽰交通系统信息※\n");printf("\t\t\t※※ 4=退出※\n");printf("\t\t\t※※※※※※※※※※※※※※※※※※※※※\n\n\n");printf("********************************************************************************\n");printf("\t\t\t请选择?");scanf("%d",&y);getchar();switch(y){case 1: system("cls");Administer(G);break; //管理员case 2: system("cls");j = serchlu(&G);break; //⽤户case 3: show(G);//显⽰所有路径break;case 4: system("cls");printf("\n\n\n\t\t\t\t谢谢使⽤.......\n\n\n\n");exit(0);break;default:printf("请按提⽰重新输⼊\n");}}return 0;}void Administer(Graph G)/* 显⽰管理员管理项⽬选择界⾯ */{int i,j=0,x,y;char password[5],a;printf("请输⼊登陆密码(admin)|错误三次退出|:");while(1){ for(x=0;x<5;x++){scanf("%c",&a);password[x]=a;}if(password[0]!='a'||password[1]!='d'||password[2]!='m'||password[3]!='i'||password[4]!='n') {printf("输⼊错误,请重新输⼊!\n密码:");j++;if(j==3)exit(0);scanf("%c",&a);}else break;}system("cls");while(1){ printf("\n\n\n\n\n\n");printf("********************************************************************************\n\n");printf("\t\t\t※※※※※※※请选择管理项⽬※※※※※※\n");printf("\t\t\t※※ 1=增加城市※\n");printf("\t\t\t※※ 2=增加旅游路径※\n");printf("\t\t\t※※ 3=返回上⼀级菜单※\n");printf("\t\t\t※※※※※※※※※※※※※※※※※※※※\n\n\n");printf("********************************************************************************\n");printf("选择?");scanf("%d",&y);switch(y){case 1:i =insertcity(&G); /*增加城市*/if(i == -1)printf("该城市已经存在\n");elseprintf("增加成功\n");break;case 2: i = insertlu(&G);/*增加路径*/if(i == -1)printf("增加失败、不存在此城市\n");elseprintf("增加成功\n");break;case 3: baocun (G);system("cls");main(); break; /*返回主菜单*/default:printf("请按提⽰重新输⼊\n");}}}int insertlu(Graph *G)//增加城市交通信息{char Fromc[20], Toc[20];int i, j;int d, c, t;printf("输⼊增加路径的出发城市、⽬的城市、距离(公⾥)、花费(元)、时间(⼩时): \n"); scanf("%s %s %d %d %d", Fromc, Toc, &d, &c, &t);getchar();i = Located(G, Fromc);j = Located(G, Toc);if(i == -1 || j == -1)return -1;else{G->arcs[i][j].distance = G->arcs[j][i].distance = d;G->arcs[i][j].cost = G->arcs[j][i].cost = c;G->arcs[i][j].time = G->arcs[j][i].time = t;G->l_n++;}return 1;}int insertcity(Graph *G)//增加城市{char name[20];printf("输⼊要增加的城市: ");scanf("%s", name);getchar();if(G->c_n == 0){strcpy(G->clist[0].name, name);G->c_n++;}else{for(int i = 0; i < G->c_n; i++)if(strcmp(G->clist[i].name, name) == 0)return -1;elsestrcpy(G->clist[G->c_n].name, name);G->c_n++;}return 1;void mindistance(Graph *G, int v0, int v1)//最短距离{int *d;int vd,w,i,j,v;int mind, *pred, *finald;finald = (int *)malloc(G ->c_n * sizeof(int));//判断顶点是否已求出最短路径d = (int *)malloc(G ->c_n * sizeof(int));//储存起始点到各点的最短路径pred = (int *)malloc(G ->c_n * sizeof(int));//最后⽤于输出最短路径for(v=0;v < G->c_n; v++){finald[v] =0 ;d[v] =G ->arcs[v0][v].cost ;if(d[v] < zuida)pred[v] =v0;elsepred[v] =-1;}d[v0] = 0;//到起始点⽆路径finald[v0] =1;//v0放⼊到final数组⾥for(i=1;ic_n ;i++)//从1开始、因为起始点已经在final⾥⾯、剩下n - 1个顶点、循环n - 1次。
数据结构课程设计-全国交通咨询模拟系统 程序设计 源代码

数据结构课程设计-全国交通咨询模拟系统程序设计源代码一、程序界面A.关于程序1. 该程序以C语言为开发工具,运行该程序前请确保你地机器上已安装tc或turboc ,否则系统会提示:BGI Error: Graphics not initialized (use 'initgraph'>而无法使用该程序.遇到此情况请安装tc ,建议将其安装到C:目录下,以确保程序运行万无一失.2. 该软件完全支持鼠标,请放心使用.3. 该程序能将您输入地城市转换为象素坐标,显示在屏幕上,操作直观方便,选择城市时,用时标一点该城市即可,省去了输入地麻烦.如果您选择地两个城市间有路径地话,程序除了给您信息输出外,还会在地图上将此路径以不同颜色画出,更加直观.4. 该程序附带三个数据文件(num.txt,vex.txt,len.txt --此文件由系统默认>以供用户调试,用户还可自己创建文件,以备实验查询使用.B. 程序地使用用户打开程序,会看到命令行 : FILE CHANGE SHORTWAY MAP HELP ABOUT QUIT CLRSCR用户将鼠标放于某命令上会看到屏幕最下面有一行字在闪动,这是对命令地解释,如当鼠标访于FILE上时其下解释"press this button to open/creat a file" ,当鼠标空闲时在下面显示:"Please Enter Your Choice With Mouse Or Keyboard" ,提示用户进行命令选择.单机鼠标就会将某一功能打开从而进行某一操作2.用户运行程序时请先打开 FILE 菜单,该菜单有4个命令选项:[ 信息提示 ]1. 调用已存信息库文件(由用户提供>2. 创建新地信息库文件3. 调用演示信息库文件4. 退出程序[ 请输入你地选择(1/2/3/4> ]此时程序等待用户输入选择.输入正确后程序会自动打开地图由用户进行下一步操作.3. 对于其他命令,用户可由显示于屏幕下面地提示进行相关操作.二.程序内部设计及数据结构A. 数据地存放格式1.火车信息数据结构定义:typedef struct inf{ int num。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计- 全国交通咨询模拟系统程序设计源代码一、程序界面A•关于程序1.该程序以C语言为开发工具,运行该程序前请确保你地机器上已安装tc或turboc ,否则系统会提示:BGI Error: Graphics not initialized (use 'initgraph'>而无法使用该程序.遇到此情况请安装tc ,建议将其安装到C:目录下,以确保程序运行万无一失.2.该软件完全支持鼠标,请放心使用.3.该程序能将您输入地城市转换为象素坐标,显示在屏幕上,操作直观方便,选择城市时,用时标一点该城市即可,省去了输入地麻烦.如果您选择地两个城市间有路径地话,程序除了给您信息输出外,还会在地图上将此路径以不同颜色画出,更加直观.4.该程序附带三个数据文件(num.txt,vex.txt,len.txt -- 此文件由系统默认>以供用户调试,用户还可自己创建文件,以备实验查询使用.B. 程序地使用用户打开程序,会看到命令行: FILE CHANGE SHORTWAY MAP HELP ABOUT QUIT CLRSCR用户将鼠标放于某命令上会看到屏幕最下面有一行字在闪动,这是对命令地解释,如当鼠标访于FILE 上时其下解释"press this button to open/creat a file" , 当鼠标空闲时在下面显示:"Please Enter Your Choice With Mouse Or Keyboard" , 提示用户进行命令选择.单机鼠标就会将某一功能打开从而进行某一操作2.用户运行程序时请先打开FILE 菜单,该菜单有4 个命令选项:[ 信息提示]1.调用已存信息库文件(由用户提供>2.创建新地信息库文件3.调用演示信息库文件4.退出程序[ 请输入你地选择(1/2/3/4> ]此时程序等待用户输入选择.输入正确后程序会自动打开地图由用户进行下一步操作3.对于其他命令,用户可由显示于屏幕下面地提示进行相关操作二.程序内部设计及数据结构A. 数据地存放格式1.火车信息数据结构定义:typedef struct inf{ int num 。
/* 车次*/int sttl。
int stt2。
/* 出发时间*/int endt1 。
int endt2。
/*到达时间*/int waitt 。
/* 等待时间*/int allt。
/*两站之间总耗时*/int money 。
/*票价*/}inf2.车站信息数据结构定义:typedef struct ArcCell{int ff。
/*ff=1 表示两点有信息*/int adj。
/*路程长度*/inf two。
/*火车信息* /}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]3.图地数据结构定义typedef struct Mgraph{ char vexs[MAX_VERTEX_NUM][MAX_VERTEX_NUM] 。
/*顶点名*/ AdjMatrix arcs 。
/* 车站信息*/int vexsx[MAX_VERTEX_NUM] 。
/* 该顶点地X 坐标*/int vexsy[MAX_VERTEX_NUM] 。
/* 该顶点地Y 坐标*/int vexnum,arcnum 。
/* vexnum :顶点地数目,arcnum :路线数目*/}Mgraph 。
4.基于以上数据结构地数据存储举例:<以下为部分顶点信息)wulumuqi 49 59<表示城市wulumuqi 在640X480 地屏幕中位于坐标49,59 处, 下同)xining 97 155lanzhou 121 174<以下为部分路线信息)wulumuqi lanzhou 1 1892 1001 1 0 12 0 10 670 150<表示从城市wulumuqi 到城市lanzhou 有信息‘ 1,路'线长度为1892,车次为1001,从城市wulumuqi 开出时间为1 : 00,到lanzhou站时间为12: 00,在lanzhou停留10分钟,总耗时670分钟<总耗时由系统自动计算出),车票报价150元.下同)xining lanzhou 1 216 1002 9 0 12 5 5 190 50xining xian 0 10000 10000 10000 10000 10000 10000 10000 10000 10000<表示xining 与xian 两城市间无直达<直接相连)路线)B. 求最优路径地算法求最优路径地算法可以说是本程序地核心.本程序使用地是弗洛伊德<floyd )算法1 、弗洛伊德算法地基本思想设求顶点vi到vj间地最短路径,若vi到vj有弧,则弧上地权值是一条路径,但未必是最短路径,要经过n-1次测试.首先将顶点vi加入,即看(vi,v1>,(v1,vj>是否有路径,且比(vi,vj>低,如是,则用后两段路径代替,并称这是vi到vj中间顶点序号不大于1地最短路径.再将顶点v2加入,得到vi到vj中间顶点序号不大于2地最短路径.如此下去,直到vn加入,得到vi到vj中间顶点序号不大于n地最短路径,算法结束.2、弗洛伊德<floyd )算法清单略述void ShortestPath_FLOYD(MGraph G,PathMatrix &P[],DistanceMatrix &D>{for (v=0 。
v<G,vexnum。
++v> for (w=0 。
w<G,vexnum 。
++w>{D[v][w]=G.arcs[v][w] 。
for (u=0。
u<G,vexnum。
++u> P[v][w]=FALSE 。
if(D[v][w]<INFINITY>{p[v][w][v]=TRUE 。
P[v][w][w]=TRUE 。
}}for (u=0。
u<G.vexnum。
u++> /*将顶点u从0到n-1逐个加入测试*/for (v=0。
v<G.vexnum。
v++> /* 求v 到w 间地最短路径*/for (w=0 。
w<G.vexnum 。
w++>if (D[v]+D[w]<D[v][w]> /* 从v 经u 到w 地一条路径更短*/{ D[v][w]=D[v]+D[w] 。
for (i=0 。
i<G,vexnum 。
++i>P[v][w]=P[v]||P[w] 。
}在程序计算最短路线,最短时间,最少消费时使用地就是这个算法.C. 交通图地绘制问题1 .将DOS 默认地字符模式改为图形模式由于DOS 默认地显示形式为字符模式,因此要在DOS 下画图必须将字符模式改为图形模式.绘图程序地第一步就是初始化图形硬件.这里地硬件指地是为显示图形所必备地显示适配器.用于设置计算机图形方式地函数叫作initgraph( >, 它地原型如下:void far initgraph(int far *gdriver, int far *gmode, char far *driver_path> ;initgraph( >地函数原型在graphics"头文件中,它必须包含在C图形程序地开始处.该文件包括了所有绘图组成成分地数据结构、常量和函数原型定义.其中,在initgraph( >地函数原型中头两个参数是整型指针.它们分别存有视频适配器和模式地逻辑值.第三个参数指明C 绘图驱动程序所存储地路径.指向驱动程序地路径名可以是全程路径名,如:initgraph(&driver, &mode, 如果 BGI 驱动程序就在当前目录下 ,您也可以这样调用 initgraph( > :initgraph(&driver, &mode, ;“”>这里路径名为空字符串 .本程序使用 DETECT 宏来自动检测本机器最优地图形驱动方式 .在程序地末尾使用 closegraph( > 函数 ,以关闭 BGI 系统并把显示器地视频方式恢复到调用 initgraph( > 以前 地情况 .本程序绘图部分主要程序:#include <graphics.h> // 包含绘图头文件void main(void> // 主函数{int gdriver = DETECT 。
// 使用自检地方式int gmode 。
initgraph(&gdriver, &gmode, “c: bgi ”。
> // 初始化图形系统// 此处为绘图代码进行绘图 ,下面有详细介绍closegraph(>。
// 关闭图形系统}2.本程序显示地交通图绘制方法详述A.读入信息后显示路线地主要程序段:for(i=0 。
i<G.vexnum 。
i++>for(j=0 。
j<G.vexnum 。
j++>/* 用此循环将所有城市画出 */{ setcolor(WHITE> 。
circle(G.vexsx,G.vexsy,4> 。
/*画出半径为 4 个像素地路线起始城市 A*/circle(G.vexsx[j],G.vexsy[j],4>。
/*画出半径为4个像素地路线结束城市 B,为白色*/setcolor(YELLOW>a ・ ”bcg:iouttextxy(G.vexsx+5,G.vexsy-3,G.vexs> 。
/* 写出路线起始城市A 城市名*/outtextxy(G.vexsx[j]+5,G.vexsy[j]-3,G.vexs[j]> 。
/*写出路线结束城市B 城市名,黄色*/if(G.arcs[j].ff==1>/* 如果两城市间有信息*/{setcolor(WHITE> 。
line(G.vexsx,G.vexsy,G.vexsx[j],G.vexsy[j]> 。
/* 在两城市间画一条线, 白色*/}}B.求出最优路线后地路线绘制程序段{if(D[j]<INFINITY>/* D[j]<INFINITY 表示已找到最优路径*/{ printf(" 里程:%d km",D[j]> 。
k=path[j] 。
if(k!=-1>{printf("\n 最短路线:(图中绿色>">。
printf("\n%s",G.vexs>。