学生实训报告 实训名称: 数据结构实训指导老师:姓名: 学号: 班级: 日期: 一、实训工程工程名称:全国交通咨询模拟二、实训的目的1.熟悉图数据结构;2.掌握图的顺序存储结构—邻接表;3.掌握最短路径算法4.上机调试程序,掌握查错、排错使程序能正确运行。三.实训要求1.每个人独立完成实训工程,相互之间可以沟通,不能抄袭三、实验的环境:1.硬件环境: PC 机2.软件环环境:Windows2000 +Visual C++6四、算法描述: 建立图的数据结构,采纳邻接矩阵作为其存储结构。存储以上的全国主要城市的交通信息。通过软件模拟的方法实现:给定出发点和终点,求出它们之间的最短路径,并给出最短路径的线路。五、源程序清单:#include #include#define VEX_NUM 26#define MAXINT 1000000typedef struct graph{ char city[VEX_NUM][10]; int arcs[VEX_NUM][VEX_NUM];}Mgraph;void CreatGraph(Mgraph *G,int e);void Dijkstra(Mgraph *Gn, int v0,int path[],int dist[]);void PutPath(Mgraph *g,int v0,int v1,int p[],int d[]);int index(char s[],Mgraph *g);void main(){ Mgraph *g; int i; int e; int v0,v1; char sr[10],dt[10]; int dist[VEX_NUM]; int path[VEX_NUM]; g=new Mgraph; CreatGraph(g,30); printf("输入出发城市和终点城市\n"); getchar(); gets(sr); v0=index(sr,g); gets(dt); v1=index(dt,g); Dijkstra(g,v0,path,dist); PutPath(g,v0,v1,path,dist);}void CreatGraph(Mgraph *G,int e){ int i,j,k,cost; printf("输入城市名称\n"); for(i=0;icity[i]); for(i=0;iarcs[i][j]=MAXINT; printf("输入城市之间的距离\n"); for(k=0;karcs[i][j]=cost; G->arcs[j][i]=cost; }}void Dijkstra(Mgraph *Gn, int v0,int path[],int dist[]){ int s[VEX_NUM]; int v; int w; int i,j,k; int min; for(v=0; varcs[v0][v]; if(dist[v]arcs[v][j]arcs[v][j]; path[j]=v; } }}void PutPath(Mgraph *g,int v0,int v1,int p[],int d[]){ int k; int next; int top=0; int st[20]; if(d[v1]%s:没有路径\n",g->city[v0],g->city[v1]); return; } st[top++]=v0; while(top) { next=st[--top]; if(top!=0) printf("%s->",g->city[next]); else printf("%s\n",g->city[next]); } printf("两个城市之间的最短距离为:%d\n",d[v1]);}int index(char s[],Mgraph *g){ int i; for(i=0;icity[i])==0) return i;}六、运行结果:七、实验运行情况分析(包括算法、运行结果、运行环境等问题的讨论)。