当前位置:文档之家› 校园导游咨询系统源代码

校园导游咨询系统源代码

#include<stdlib.h>//standard library标准库头文件#include<stdio.h>//标注输入输出函数头文件#include<string.h>//字符函数头文件#define MAX 10000 //定义路程最远距离符号常量无穷大#define MAX_VERTEX_NUM 10//定义的景点/顶点数量符号常量最大顶点数10个typedef struct //定义一个结构体用于表示路径{int adj; //路径长度权值}Ar,Ad[10][10];//起点和终点变量名typedef struct //定义一个结构体用于存放景点信息{char name[30];//景点名int num;//景点编号char introduction[100];//景点介绍}infotype;//景点信息变量名typedef struct//用来定义一个图{infotype vexs[10];Ad arcs;int vexnum,arcnum;}MGraph;MGraph b;MGraph InitGraph()//初始化图形{MGraph G;int i;int j;G.vexnum=10;G.arcnum=10;for(i=0;i<G.vexnum;i++)G.vexs[i].num=i;//用字符串复制把各个景点的信息传递给指针strcpy(G.vexs[0].name,"老校区宿舍");strcpy(G.vexs[0].introduction,"这里有夺命坡,冬天来这里一定要小心脚下");strcpy(G.vexs[1].name,"二教");strcpy(G.vexs[1].introduction,"同学们日常上课大多数都在这");strcpy(G.vexs[2].name,"石头楼");strcpy(G.vexs[2].introduction,"石头楼是我国著名建筑大师梁思成在美国宾西法尼亚大学建筑系毕业回国之后设计的第一件作品");strcpy(G.vexs[3].name,"主教");strcpy(G.vexs[3].introduction,"一座集实验教学于一体的教学楼,但是我没在里面上过课");strcpy(G.vexs[4].name,"媒体楼");strcpy(G.vexs[4].introduction,"信息院有一部分的上机课是在这里上的,在这里你还有可能艳遇到媒体系的美女呦");strcpy(G.vexs[5].name,"图书馆");strcpy(G.vexs[5].introduction,"自从新校区图书馆建成后这里就变成了纯粹的自习室,不过这里冬天真的很暖");strcpy(G.vexs[6].name,"专家招待所");strcpy(G.vexs[6].introduction,"这里是招待一些贵宾的地方,有些留学生也住在这儿");strcpy(G.vexs[7].name,"学术交流中心");strcpy(G.vexs[7].introduction,"这里经常会开很多高大上的会议,还会有外国友人出现在这");strcpy(G.vexs[8].name,"东街教学楼");strcpy(G.vexs[8].introduction,"这里也是一个日常上课比较多的地方,没课的时候来这里上自习也是不错的选择");strcpy(G.vexs[9].name,"校医院");strcpy(G.vexs[9].introduction,"新生的体检,打疫苗都在这,而且来这里买药真的很便宜");//运用双重循环给每条边赋权值for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[i][j].adj=MAX;G.arcs[0][1].adj=600;G.arcs[0][2].adj=600;G.arcs[0][3].adj=700;G.arcs[1][2].adj=50;G.arcs[1][4].adj=100;G.arcs[2][5].adj=150;G.arcs[2][3].adj=50;G.arcs[3][5].adj=250;G.arcs[4][5].adj=100;G.arcs[4][8].adj=450;G.arcs[5][6].adj=150;G.arcs[5][8].adj=200;G.arcs[6][7].adj=50;G.arcs[6][8].adj=100;G.arcs[6][9].adj=250;G.arcs[7][8].adj=100;G.arcs[7][9].adj=80;G.arcs[8][9].adj=50;for(i=0;i<G.vexnum;i++)for(j=0;j<G.vexnum;j++)G.arcs[j][i].adj=G.arcs[i][j].adj;return G;}//菜单void Menu(){printf("\n *************************** 欢迎来到东北电力大学**************************\n");printf(" \n");printf(" 祝你:旅途愉快\n");printf(" \n");printf(" 1.浏览校园全景\n");printf(" 2.查看所有游览路线\n");printf(" 3.选择出发点和目的地\n");printf(" 4.查看各景点信息\n");printf(" 5.退出系统\n");printf(" \n");printf( "诚心为你服务-请选择(输入编号.回车结束):" );}//查看各景点信息函数void Browser(MGraph *G){int v;printf("\n");printf("编号.景点名称.简介 \n");for(v=0;v<G->vexnum;v++){printf("%-4d%-16s%-56s\n",G->vexs[v].num,G->vexs[v].name,G->vexs[v].introduction);}printf("\n");printf("§·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽§\n");printf("§——>东§\n");printf("§§\n"); printf("§——————1.二教—————4. 媒体楼————————————§\n");printf("§┃┃┃┃§\n");printf("§┃┃┃┃§\n");printf("§ 0.老校区宿舍———2.石头楼————5.图书馆————————————┃§\n");printf("§┃┃┃┃§\n");printf("§┃┃┃————6.专家招待所———8.东街§\n");printf("§——————3.主教———————┃—__________/ ┃§\n");printf("§┃/ —┃§\n");printf("§ 7.学术交流中心————9.校医院§\n");printf("§§\n");printf("§·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·∽·§\n");printf("请按任意键继续!");printf("\n");getch();}//查看所有浏览路线void ShortestPath_DIJ(MGraph * G){int v,w,i,min,t=0,x,flag=1,v0;int final[20], D[20], p[20][20];while(flag){printf("请输入一个起始景点编号0-9:");scanf("%d",&v0);if(v0<0||v0>G->vexnum){printf("景点编号不存在!请重新输入景点编号0-9:"); scanf("%d",&v0);}if(v0>=0&&v0<G->vexnum)flag=0;}for(v=0;v<G->vexnum;v++){final[v]=0;D[v]=G->arcs[v0][v].adj;for(w=0;w<G->vexnum;w++)p[v][w]=0;if(D[v]<MAX){p[v][v0]=1;p[v][v]=1;}}D[v0]=0;final[v0]=1;for(i=1;i<G->vexnum;i++){min=MAX;for(w=0;w<G->vexnum;w++)if(!final[w])if(D[w]<min){v=w;min=D[w];}final[v]=1;for(w=0;w<G->vexnum;w++)if(!final[w]&&(min+G->arcs[v][w].adj<D[w])){D[w]=min+G->arcs[v][w].adj;for(x=0;x<G->vexnum;x++)p[w][x]=p[v][x];p[w][w]=1;}}for(v=0;v<G->vexnum;v++){if(v0!=v) printf("%s",G->vexs[v0].name);for(w=0;w<G->vexnum;w++){if(p[v][w]&&w!=v0)printf("-->%s",G->vexs[w].name);t++;}if(t>G->vexnum-1&&v0!=v)printf("总路线长%dm\n\n",D[v]);}}//弗洛伊德算法用于求最短路void Floyd(MGraph *G){int v,u,i,w,k,j,flag=1,p[10][10],D[10][10];for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++){D[v][w]=G->arcs[v][w].adj;for(u=0;u<G->vexnum;u++)p[v][w]=0;if(D[v][w]<MAX){p[v][w]=1;p[v][w]=1;}}for(u=0;u<G->vexnum;u++)for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++)if(D[v][u]+D[u][w]<D[v][w]){D[v][w]=D[v][u]+D[u][w];for(i=0;i<G->vexnum;i++)p[v][w]=p[v][u]||p[u][w];}while(flag){printf("请输入出发点和目的地的编号0-9如(* *):");scanf("%d%d",&k,&j);if(k<0||k>G->vexnum||j<0||j>G->vexnum){printf("景点编号不存在!请重新输入出发点和目的地的编号:"); scanf("%d%d",&k,&j);}if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum)flag=0;}printf("%s",G->vexs[k].name);for(u=0;u<G->vexnum;u++)if(p[k][j]&&k!=u&&j!=u)printf("-->%s",G->vexs[u].name);printf("-->%s",G->vexs[j].name);printf(" 总路线长%dm\n",D[k][j]);}//查询单个景点信息void Search(MGraph *G)int k,flag=1;while(flag){printf("请输入要查询的景点编号0-9:");scanf("%d",&k);if(k<0||k>G->vexnum){printf("景点编号不存在!请重新输入景点编号0-9:");scanf("%d",&k);}if(k>=0&&k<G->vexnum)flag=0;}printf("\n");printf("编号.景点名称.简介\n");printf("%-4d%-16s%-56s\n",G->vexs[k].num,G->vexs[k].name,G->vexs[k].i ntroduction);printf("\n");}int LocateVex(MGraph *G,char* v)/* 初始条件: 图G存在,v和G中顶点有相同特征*//* 操作结果: 若G中存在顶点v,则返回该顶点在图中位置;否则返回-1 */ {int c=-1,i;for(i=0;i<G->vexnum;i++)if(strcmp(v,G->vexs[i].name)==0){c=i;}return c;}void print(MGraph *G)//输出景点间距离{int v,w,t=0;for(v=0;v<G->vexnum;v++)for(w=0;w<G->vexnum;w++){if(G->arcs[v][w].adj==MAX)printf("∞");//没有路输出无穷else printf("%-7d",G->arcs[v][w].adj);//有路输出权值和 t++;if(t%G->vexnum==0)printf("\n");}}//主函数void main(){ int i;b=InitGraph();//调用初始化地图函数Menu();//调用菜单函数scanf("%d",&i);while(i!=5){switch(i){case 1:system("cls");Browser(&b);Menu();break;case 2:system("cls");ShortestPath_DIJ(&b);Menu();break; case 3:system("cls");Floyd(&b);Menu();break;case 4:system("cls");Search(&b);Menu();break;default:exit(1);}scanf("%d",&i);}}。

相关主题