校园导航系统源代码
- 格式:doc
- 大小:37.50 KB
- 文档页数:10
#1 数据结构实验之校园导游咨询#include<stdlib.h>#include<stdio.h>#include<iostream.h>#include<string.h>#include<math.h>#include "stdio.h"#define null 0#define num 20#define maxdist 10000typedef struct{char data[num];int edges[num][num];}graph;void dijkstra(graph g,int n,int i,int d[num],int p[num]) {int s[num];int mindist,dist;int j,k,u;for(j=0;j<n;j++){d[j]=g.edges[i][j];s[j]=0;if((d[j]<maxdist)&&(d[j]!=0)) p[j]=i;elsep[j]=-1;}s[i]=1;for(j=0;j<n-1;j++){mindist=maxdist;u=i;for(k=0;k<n;k++)if((s[k]==0)&&(d[k]<mindist)) {u=k;mindist=d[k];}s[u]=1;for(k=0;k<n;k++)if(s[k]==0){dist=d[u]+g.edges[u][k];if(dist<d[k]){d[k]=dist;p[k]=u;}}}void opdijk(int v0,int n,int d[],int p[]) {int i,pre;for(i=0;i<n;i++)if(i!=v0){printf("\n%d",i);pre=p[i];while(pre!=-1){printf("<--%d",pre);/****************************/ pre=p[pre]; }if(d[i]==maxdist)printf("<--%d",v0);printf("\tshortestway:%d",d[i]);}}void floyd(graph g,int n,int d[][num],int p[][num]){int i,j,k;for(i=0;i<n;i++)for(j=0;j<n;j++){d[i][j]=g.edges[i][j];if((d[i][j]<maxdist)&&(d[i][j]!=0))p[i][j]=j;elsep[i][j]=-1;}for(i=0;i<n;i++)d[i][i]=0;for(k=0;k<n;k++)for(i=0;i<n;i++)for(j=0;j<n;j++)if(d[i][j]>d[i][k]+d[k][j]){d[i][j]=d[i][k]+d[k][j] ;p[i][j]=p[i][k];}}void opfloy(int n,int d[][num],int path[][num]) {int i,j,next;for(i=0;i<n;i++){printf("\n\nyuandian is v%d:",i);for(j=0;j<n;j++){printf("\nthe shortest way from%dto%dis:\n",i,j);printf("%d",i);next=path[i][j];while(next!=-1){printf("->%d",next);next=path[next][j];}if(d[i][j]==maxdist)printf("<-%d",j);/***************************/ printf("\t%d",d[i][j]);}}}void main(){graph g;int i,j,k,n;int d[num],p[num],sd[num][num],sp[num][num];//clrscr();n=11;g.data[0]='a';g.data[1]='b';g.data[2]='c';g.data[3]='d';g.data[4]='e';g.data[5]='f';g.data[6]='g';g.data[7]='h';g.data[8]='i';g.data[9]='j';g.data[10]='k';for(i=0;i<n;i++)for(j=0;j<n;j++)g.edges[i][j]=maxdist; for(j=0;j<n;j++)g.edges[i][j]=0;g.edges[0][2]=30;g.edges[0][5]=40;g.edges[0][1]=20;g.edges[1][5]=60;g.edges[1][4]=40;g.edges[1][6]=30;g.edges[2][3]=35;g.edges[2][7]=40;g.edges[3][10]=20;g.edges[3][8]=15;g.edges[4][9]=30;g.edges[4][8]=35;g.edges[4][10]=10;g.edges[5][10]=10;g.edges[5][8]=45;g.edges[5][2]=20;g.edges[6][0]=70;g.edges[7][0]=50;g.edges[8][9]=20;g.edges[9][1]=55;g.edges[10][0]=125;//clrscr();printf("\t --WELCOME TOU USE GUIDE!!--\n");printf("\t*****************************************\n");printf("\t* *\n");printf("\t*\tINFOMATION-i\tVISIT-v\t\t*\n\t*\t ABOUT ME-a\tQUIT-q\t\t*\n");printf("\t*\t\t\t\t\t*\n\t*\t\t\t\t\t*\n\t*\t\t\t\t\t*\n\t*\t\t\t\t\t*\n \t*\t\t\t\t\t*\n");printf("\t*****************************************\n");printf("\t*PLEASE ENTER AN ORDER:i? v? m? q?\t*\n");printf("\t*CLEAR THE SCREEN:c\t\t3\t*\n");printf("\t*****************************************\n");do{/*gets(t);*/switch(getchar()){case'a':{printf("NAME:****** CLASS:02computer(3)\n"); printf("PRIVATE EMAIL:devo800@\n"); }break;/* case'g':{FILE *tp;*//* break; */case'i':{FILE *tp;char ch;if((tp=fopen("d:\\info.txt","rt"))==null) {printf("\ncan't open!");getchar();exit(1);}ch=fgetc(tp);while(ch!=EOF){putchar(ch);ch=fgetc(tp);}fclose(tp);}break;case'c':break;case'v':{do{printf("\nINPUT JIE DIAN(0-10):\n"); scanf("%d",&i);{dijkstra(g,n,i,d,p);printf("\n\nyuandian is v%d:",i); opdijk(i,n,d,p);}}while(1);}break;default: exit(1);}}while(getchar());getchar();}*--------------------校园导游系统------------------*/#include<stdio.h>#include<process.h>#define INT_MAX 1000000#define n 10int cost[n][n];//边的值int shortest[n][n];//两点间的最短距离int path[n][n];//经过的景点的;void floyed();int display(int i,int j);void introduce()//introduce of the palce{ int a;printf("Place 1:凯旋门\n"); printf("Place 2:图书馆\n");printf("Place 3:行政楼\n"); printf("Place 4:飞翔门\n"); printf("Place 5:大广场\n");printf("Place 6:ABC教学楼\n"); printf("Place 7:体育场\n"); printf("Place 8:月亮湾\n"); printf("Place 9:English Coner\n"); printf("Place 10:树人广场\n");do{printf("您想查询哪个景点的详细信息?请输入景点编号:");scanf("%d",&a);getchar();switch(a){case 1:。
#include<stdio.h>#define NUM 10int shorted0(int a[NUM][NUM],int i,int j){ int m,n,r;m=i;n=j;r=a[m][n];printf("%d->%d:%d\n",(m+1),(n+1),r);return r;}int shorted1(int a[NUM][NUM],int i,int j){ int m,n,w=0,t=0,r=0;int u[NUM-2][3];int b[NUM-2];int sign=0;m=i;n=j;while(w<NUM){if(w!=m&&w!=n){b[t]=a[m][w]+a[w][n];u[t][0]=m;u[t][1]=w;u[t][2]=n;t++;}w++;}r=b[0];for(w=1;w<NUM-2;w++){if(r>b[w]){r=b[w];sign=w;}}for(w=0;w<3;w++){if(w<2)printf("%d->",(u[sign][w]+1));elseprintf("%d:%d\n",(u[sign][w]+1),r);}}int shorted2(int a[NUM][NUM],int i,int j){int m,n,w=0,q=0,r=0,t=0;int u[(NUM-2)*(NUM-3)][4];int b[(NUM-2)*(NUM-3)];int sign=0;m=i;n=j;while(w<NUM){if(w!=m&&w!=n){q=0;while(q<NUM){if(q!=m&&q!=n&&q!=w){b[t]=a[m][w]+a[w][q]+a[q][n];u[t][0]=m;u[t][1]=w;u[t][2]=q;u[t][3]=n;t++;}q++;}}w++;}r=b[0];for(w=1;w<(NUM-2)*(NUM-3);w++){if(r>b[w]){r=b[w];sign=w;}}for(w=0;w<4;w++){if(w<3)printf("%d->",(u[sign][w]+1));elseprintf("%d:%d\n",(u[sign][w]+1),r);}}int shorted3(int a[NUM][NUM],int i,int j){int m,n,w=0,q=0,r=0,t=0,x=0;int u[(NUM-2)*(NUM-3)*(NUM-4)][5];int b[(NUM-2)*(NUM-3)*(NUM-4)];int sign=0;m=i;n=j;while(w<NUM){if(w!=m&&w!=n){q=0;while(q<NUM){if(q!=m&&q!=n&&q!=w){x=0;while(x<NUM){if(x!=m&&x!=n&&x!=w&&x!=q){b[t]=a[m][w]+a[w][q]+a[q][x]+a[x][n];u[t][0]=m;u[t][1]=w;u[t][2]=q;u[t][3]=x;u[t][4]=n;t++;}x++;}}q++;}}w++;}r=b[0];for(w=1;w<(NUM-2)*(NUM-3)*(NUM-4);w++){if(r>b[w]){r=b[w];sign=w;}}for(w=0;w<5;w++)if(w<4)printf("%d->",(u[sign][w]+1));elseprintf("%d:%d\n",(u[sign][w]+1),r);}return r;}int shorted4(int a[NUM][NUM],int i,int j){int m,n,w=0,q=0,r=0,t=0,x=0;int s=0;int u[(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5)][6];int b[(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5)];int sign=0;m=i;n=j;while(w<NUM){if(w!=m&&w!=n){q=0;while(q<NUM){if(q!=m&&q!=n&&q!=w){x=0;while(x<NUM){if(x!=m&&x!=n&&x!=w&&x!=q){s=0;while(s<NUM){if(s!=m&&s!=n&&s!=w&&s!=q&&s!=x){b[t]=a[m][w]+a[w][q]+a[q][x]+a[x][s]+a[s][n];u[t][0]=m;u[t][1]=w;u[t][2]=q;u[t][3]=x;u[t][4]=s;u[t][5]=n;t++;}s++;}}x++;}}q++;}}w++;}r=b[0];for(w=1;w<(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5);w++){if(r>b[w]){r=b[w];sign=w;}}for(w=0;w<6;w++){if(w<5)printf("%d->",(u[sign][w]+1));elseprintf("%d:%d\n",(u[sign][w]+1),r);}return r;}int shorted5(int a[NUM][NUM],int i,int j){int m,n,w=0,q=0,r=0,t=0,x=0;int s=0,d=0;int u[(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5)*(NUM-6)][7];int b[(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5)*(NUM-6)];int sign=0;m=i;n=j;while(w<NUM){if(w!=m&&w!=n){q=0;while(q<NUM){if(q!=m&&q!=n&&q!=w){x=0;while(x<NUM){if(x!=m&&x!=n&&x!=w&&x!=q){s=0;while(s<NUM){if(s!=m&&s!=n&&s!=w&&s!=q&&s!=x){d=0;while(d<NUM){if(d!=m&&d!=n&&d!=w&&d!=q&&d!=x&&d!=s){b[t]=a[m][w]+a[w][q]+a[q][x]+a[x][s]+a[s][d]+a[d][n];u[t][0]=m;u[t][1]=w;u[t][2]=q;u[t][3]=x;u[t][4]=s;u[t][5]=d;u[t][6]=n;t++;}d++;}}s++;}}x++;}}q++;}}w++;}r=b[0];for(w=1;w<(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5)*(NUM-6);w++) {if(r>b[w]){r=b[w];sign=w;}}for(w=0;w<7;w++){if(w<6)printf("%d->",(u[sign][w]+1));elseprintf("%d:%d\n",(u[sign][w]+1),r);}return r;}int shorted6(int a[NUM][NUM],int i,int j){int m,n,w=0,q=0,r=0,t=0,x=0;int s=0,d=0,f=0;int u[(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5)*(NUM-6)*(NUM-7)][8];int b[(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5)*(NUM-6)*(NUM-7)];int sign=0;m=i;n=j;while(w<NUM){if(w!=m&&w!=n){q=0;while(q<NUM){if(q!=m&&q!=n&&q!=w){x=0;while(x<NUM){if(x!=m&&x!=n&&x!=w&&x!=q){s=0;while(s<NUM){if(s!=m&&s!=n&&s!=w&&s!=q&&s!=x){d=0;while(d<NUM){if(d!=m&&d!=n&&d!=w&&d!=q&&d!=x&&d!=s){f=0;while(f<NUM){ if(f!=m&&f!=n&&f!=w&&f!=q&&f!=x&&f!=s&&f!=d){b[t]=a[m][w]+a[w][q]+a[q][x]+a[x][s]+a[s][d]+a[d][f]+a[f][n];u[t][0]=m;u[t][1]=w;u[t][2]=q;u[t][3]=x;u[t][4]=s;u[t][5]=d;u[t][6]=f;u[t][7]=n;t++;}f++;}}d++;}}s++;}}x++;}}q++;}}w++;}r=b[0];for(w=1;w<(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5)*(NUM-6)*(NUM-7);w++) {if(r>b[w]){r=b[w];sign=w;}}for(w=0;w<8;w++){if(w<7)printf("%d->",(u[sign][w]+1));elseprintf("%d:%d\n",(u[sign][w]+1),r);}return r;}int shorted7(int a[NUM][NUM],int i,int j){int m,n,w=0,q=0,r=0,t=0,x=0;int s=0,d=0,f=0,g=0,k=0,o=0;int b[(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5)*(NUM-6)*(NUM-7)*(NUM-8)];m=i;n=j;while(w<NUM){if(w!=m&&w!=n){q=0;while(q<NUM){if(q!=m&&q!=n&&q!=w){x=0;while(x<NUM){if(x!=m&&x!=n&&x!=w&&x!=q){s=0;while(s<NUM){if(s!=m&&s!=n&&s!=w&&s!=q&&s!=x){d=0;while(d<NUM){if(d!=m&&d!=n&&d!=w&&d!=q&&d!=x&&d!=s){f=0;while(f<NUM){if(f!=m&&f!=n&&f!=w&&f!=q&&f!=x&&f!=s&&f!=d){g=0;while(g<NUM){if(g!=m&&g!=n&&g!=w&&g!=q&&g!=x){if(g!=s&&g!=d&&g!=f){b[t]=a[m][w]+a[w][q]+a[q][x]+a[x][s]+a[s][d]+a[d][f]+a[f][g]+a[g][n];t++;}}g++;}}f++;}}d++;}}s++;}}x++;}}q++;}}w++;}r=b[0];for(w=1;w<(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5)*(NUM-6)*(NUM-7)*(NUM-8);w++) {if(r>b[w]){r=b[w];}}printf("The shorter path owned 9 points: %d\n",r);return r;}int shorted8(int a[NUM][NUM],int i,int j){int m,n,w=0,q=0,r=0,t=0,x=0;int s=0,d=0,f=0,g=0,k=0,o=0,h=0;int b[(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5)*(NUM-6)*(NUM-7)*(NUM-8)];m=i;n=j;while(w<NUM){if(w!=m&&w!=n){q=0;while(q<NUM){if(q!=m&&q!=n&&q!=w){x=0;while(x<NUM){if(x!=m&&x!=n&&x!=w&&x!=q){s=0;while(s<NUM){if(s!=m&&s!=n&&s!=w&&s!=q&&s!=x){d=0;while(d<NUM){if(d!=m&&d!=n&&d!=w&&d!=q&&d!=x&&d!=s){f=0;while(f<NUM){if(f!=m&&f!=n&&f!=w&&f!=q&&f!=x&&f!=s&&f!=d){g=0;while(g<NUM){if(g!=m&&g!=n&&g!=w&&g!=q&&g!=x){if(g!=s&&g!=d&&g!=f){h=0;while(h<NUM){if(h!=m&&h!=n&&h!=w&&h!=q&&h!=x&&h!=s){if(h!=d&&h!=f&&h!=g){b[t]=a[m][w]+a[w][q]+a[q][x]+a[x][s]+a[s][d]+a[d][f]+a[f][g]+a[g][h]+a[h][n];t++;}}h++;}}}g++;}}f++;}}d++;}}s++;}}x++;}}q++;}}w++;}r=b[0];for(w=1;w<(NUM-2)*(NUM-3)*(NUM-4)*(NUM-5)*(NUM-6)*(NUM-7)*(NUM-8);w++) {if(r>b[w]){r=b[w];}}printf("The shorter path owned 10 points: %d\n",r);return r;}void mode(){printf(" Welcome to The Henan University Of Technology! \n");printf("--------------------------------------------------------------------\n");printf("** 地址一览表**\n");printf("============================================================= =======\n");printf("1 > 4号综合教学楼\n");printf("2 > 6 号办公楼\n");printf("3 > 7号电工实验楼\n");printf("4 > 5号语音教学楼\n");printf("5 > 老餐厅\n");printf("6 > 起点超市\n");printf("7 > 露天体育场\n");printf("8 > 篮球场\n");printf("9 > 风味餐厅\n");printf("10> 东公寓\n");printf("============================================================= =======\n");}void mostshort(int a[NUM][NUM],int m,int n){int i,j,w;int small=0;int q[NUM-1];for(i=0;i<(NUM-2);i++)q[i]=0;i=m;j=n;printf("--------------------------------------------------------------------\n");printf("输出各种数量地点之间的较短路径:\n");q[0]=shorted0(a,i,j);q[1]=shorted1(a,i,j);q[2]=shorted2(a,i,j);q[3]=shorted3(a,i,j);q[4]=shorted4(a,i,j);q[5]=shorted5(a,i,j);q[6]=shorted6(a,i,j);q[7]=shorted7(a,i,j);q[8]=shorted8(a,i,j);small=q[0];for(w=1;w<NUM-1;w++){if(small>q[w])small=q[w];}printf(" 比较得到最短路径为:%d\n",small);printf("q[7]:%d",q[7]);}void main(){int i,j,w=1;int m,n;int a[NUM][NUM]={{0,4,5,6,6,77,9,4,5,6},{4,0,5,3,5,66,77,4,5,9},{5,5,0,7,54,2,44,33,4,6},{6,3,7,0,7,98,4,44,55,14},{6,5,54,7,0,44,7,45,55,16},{77,66,2,98,44,0,45,64,21,31},{9,77,44,4,7,45,0,4,7,44},{4,4,33,44,45,64,4,0,45,56},{5,5,4,55,55,21,7,45,0,54},{6,9,6,14,16,31,44,56,54,0}};while(w==1){mode();printf(" 各地点之间的距离表\n");printf("说明:1.行序数与排序数为A地与B地的地址代码;\n");printf(" 2.行与排交叉点的值为A,B两地之间的距离;\n");printf("============================================================= ====\n");for(i=0;i<NUM;i++){for(j=0;j<NUM;j++){printf("%5d",a[i][j]);}printf("\n");}printf("请输入起始地点地址代码(1-10): ");scanf("%d",&m);printf("请输入终止地点地址代码(1-10): ");scanf("%d",&n);mostshort(a,(m-1),(n-1));printf("-----------------------------------------------------------------\n");printf("继续查询输入1,退出按任意键;\n");printf("============================================================= ====\n");printf("请您输入:");scanf("%d",&w);}printf("***************************\n");printf("!!!bye-bye!!!");}。
#include<stdio.h>#include<stdlib.h>#include<dos.h>#include<windows.h>#include<malloc.h>#define Max 100#define N 9//景点个数。
typedef int AdjMatrix[Max][Max];typedef struct{int vexs[Max];AdjMatrix arcs;}Matrix_Graph;//图的矩阵表示法。
void menu();//景点名、操作提示。
void creat(Matrix_Graph *G);//图的建立。
void path(Matrix_Graph G,int s,int e);//两景点之间最短的路径,s表示起始景点,e //最终到达景点。
#define Max 100#define N 9void menu(){printf("1---南大门\n");printf("2---老师办公室\n");printf("3---图书馆\n");printf("4---一号教学楼\n");printf("5---宿舍\n");printf("6---食堂\n");printf("7---北大门\n");printf("8---44号教学楼\n");printf("9---学校广场\n");printf("\n菜单:\n");printf("请选择位置对应数字项目:\n");printf("1----介绍\n");printf("2----路径\n");printf("0----退出\n");}void creat(Matrix_Graph *G){int i,j;for(i=1;i<=N;i++) G->vexs[i]=i;//初始化,0号位不用。
一、问题描述及基本要求【问题描述】设计一个校园导游程序,为来访的客人提供各种信息查询服务。
【基本要求】(1)设计你的学校的校园平面图,所含景点不少于10个。
以图中顶点表示学校各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
(3)为来访客人提供图中任意景点相关信息的查询。
【测试数据】由读者根据实际情况指定。
【实现提示】一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。
顶点和边均含有相关信息。
二、数据结构(1)typedef struct VData{int num;char name[20];char jieshao[100];}VData;(2)typedef struct ANode{int adj;}ANode;(3)typedef struct{VData vertex[maxnum];ANode arcs[maxnum][maxnum];int vexnum,arcnum;}AdjM;三、重点设计及代码(1)两个景点之间的全部路径void DFS_path(AdjM g, int m,int n,int k){int s;if(pre[k]==n && k<11){for(s=0;s<k;s++)printf("% ->",g.vertex[pre[s]].name);printf("%s",g.vertex[pre[s]].name); ,此时s==k)printf("\n\n");}else{s=0;while(s<g.vexnum) {if((g.arcs[pre[k]][s].adj<INFINITY) && (visited[s]==0)){visited[s]=1;pre[k+1]=s;DFS_path(g,m,n,k+1);visited[s]=0;}s++;}}}void all_path(AdjM g){int i,m,n;printf("\n\n请输入你要查询的两个景点编号:\n\n");scanf("%d %d",&m,&n);printf("\n\n");pre[0]=m;for(i=0;i<g.vexnum;i++)visited[i]=0;visited[m]=1;DFS_path(g,m,n,0);}(2)任意两个地点之间最短路径算法ShortestPath_Floyd(AdjM *g) {int i,k,j,l,flag=1,path[maxnum][maxnum][maxnum],dist[maxnum][maxnum]; printf("景点编号如下:\n");for(i=0;i<g->vexnum;i++)printf(" %-4d %-15s\n",i,g->vertex[i].name);for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++){dist[i][j]=g->arcs[i][j].adj;for(l=0;l<g->vexnum;l++)path[i][j][l]=0;if(dist[i][j]<INFINITY){path[i][j][i]=1;path[i][j][j]=1;}}for(i=0;i<g->vexnum;i++)for(j=0;j<g->vexnum;j++)for(l=0;l<g->vexnum;l++)if(dist[j][i]+dist[i][l]<dist[j][l]){dist[j][l]=dist[j][i]+dist[i][l];for(k=0;k<g->vexnum;k++)path[j][l][k]=path[j][i][k]+path[i][l][k];}while(flag==1){printf("请输入出发地和目的地:");scanf("%d %d",&k,&j);if(k>=0&&k<g->vexnum&&j>=0&&j<g->vexnum) flag=0;}printf("%s",g->vertex[k].name);for(l=0;l<g->vexnum;l++)if(path[k][j][l]&&k!=l&&j!=l)printf(">>>>>%s",g->vertex[l].name);printf(">>>>>%s",g->vertex[j].name);printf(" 总路线长%d米\n",dist[k][j]);}四、源代码#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#define maxnum 15#define INFINITY 32768int pre[maxnum];int visited[maxnum];typedef struct VData{int num;char name[20];char jieshao[100];}VData;typedef struct ANode{int adj;}ANode;typedef struct{VData vertex[maxnum];ANode arcs[maxnum][maxnum];int vexnum,arcnum;}AdjM;AdjM CreatUDN(void){int i,j;AdjM g;g.vexnum=14;g.arcnum=30;g.vertex[0].num=0;strcpy(g.vertex[0].name,"学校主大门");strcpy(g.vertex[0].jieshao,"南京信息工程大学主大门气势恢宏,是进入大学的主要通道。
Tips:这个系统是学校《⼤数据应⽤开发语⾔》的⼤作业,本身想直接在⽹上copy⼀下,结果发现校园导航系统的c/java等版本很多很多,⽽python版本⾮常之少,于是只能⾃⼰写⼀个简单版本的了。
包含三个模块:查询学校地图模块、查询两点最短路径、查询多路径信息。
@TOC前⾔随着社会经济的发展,政府对教育建设的投资越来越⼤。
众多⾼校开始扩建⼯程,校园占地⾯积⼤,楼宇种类多。
体现出国家对教育的重视程度逐年上升,科教兴国战略时⾸当其冲。
⾯对越来越⼤的学校,“迷路”成为众多⾼校新⽣不得⾯临的话题,这便需要校园导航系统来解决师⽣如何查询楼宇、如何快速到达⽬的地问题。
本系统采取基于Floyd算法来完成查询两点最短路径、查询多路径信息等问题。
⼀、题⽬功能描述:设计你的学校的校园景点,所含景点不少于10个.有景点名称,代号,简介等信息; 为来访客⼈提供图中任意景点相关信息的查询.测试数据:由读者根据实际情况指定.⼆、需求分析1.要求(1)⽤Python语⾔实现程序设计;(2)进⾏相关信息处理;(3)画出查询模块的流程图;(4)系统的各个功能模块要求⽤函数的形式实现;(5)界⾯友好(良好的⼈机互交),程序要有注释。
2.运⾏环境(1)MacOS Big Sur 11.6.2系统(2)PyCharm CE 20213.开发语⾔⼤数据开发语⾔(Python)三、概要设计1.系统流程图2.函数流程图四、详细设计1.类的分析与设计定义⼀个Attractions 类来实现输⼊和存放景点编号、名称。
定义⼀个Campus 类来存放校园⽆向图的边和节点,并给各结点定义名称。
定义⼀个Passing 类来存放路径栈、路径数、栈顶数class Attractions : num = 0 #景点编号 name = '' #景点名称class Campus :att = ["","南⼤⻔","⾏政楼","三号楼","四号楼","图书馆","⻄⼤⻔","7号楼","⼋号楼","九号楼","操场","体育馆","⼤操场"] #景点 edges = [[INF ] * M ] * M #边 Nodes_Num = 0edges_Num = 0 #总结点数,总边数class passing():pathStack= [[0]*M] ##路径栈top=0count=0 #栈顶位置,路径数visited= [[False]*M] #判断是否已经经过定义⼀个DIS类来存放path路径和distence⽬的地。
校园导航系统源代码(总9页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--#define INFINITY 10000#define MAX_VERTEX_NUM 40#define MAX 40#include<>#include<>#include<>#include<>typedef struct ArCell{int adj; /*路径长度 */}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct/*图中顶点表示主要景点,存放景点的编号、名称、简介等信息, */{char name[30];int num;char introduction[100];/*简介*/}infotype;typedef struct{infotype vexs[MAX_VERTEX_NUM];AdjMatrix arcs;int vexnum,arcnum;}MGraph;MGraph b;void cmd(void);MGraph InitGraph(void);void show1();void list();void Menu(void);void ShortestPath_DIJ(MGraph * G);void Search(MGraph *G);int LocateVex(MGraph *G,char* v);/**********主函数************************/void main(void){system("color 5f"); /*修改控制台的颜色信息,改为白字蓝底的模式*/ system("mode con: cols=140 lines=130"); /*设置批处理运行时窗口大小的*/cmd();}/********自定义函数***************//* cmd函数(根据目录选择要进行的项目)*/void cmd(void){char k;b=InitGraph();show1();Menu();while(1){scanf("\n%c",&k);switch(k){case'x':system("cls");show1();Menu();list();ShortestPath_DIJ(&b);printf("---------------------------------欢迎您的使用--------------------------------\n");printf("\n请您继续选择服务:");break;case'y':system("cls");Menu();list();Search(&b);printf("---------------------------------欢迎您的使用--------------------------------\n");printf("\n请您继续选择服务:");break;case'z':system("cls");printf(" ┏━━━━━━━━━━━━━━━━━━━━┓\n");printf(" ┃感谢使用┃\n");printf(" ┃安徽建筑术大学┃\n");printf(" ┃智能导航系统┃\n");printf(" ┗━━━━━━━━━━━━━━━━━━━━┛\n");exit(0);default:printf("输入信息错误!\n请输入x或y或z.\n");break;}}}/* 迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点 */ void ShortestPath_DIJ(MGraph * G){int v,w,i,min,t=0,x,flag=1,v0,v1,have[100],k;int final[20], D[20], p[23][23];while(flag){printf("请输入起始景点编号:\n");scanf("%d",&v0);if(v0<0||v0>G->vexnum)printf("景点编号不存在!");printf("请输入终止景点编号:\n");scanf("%d",&v1);if(v1<0||v1>G->vexnum)printf("景点编号不存在!");if(v0>=0&&v0<G->vexnum&&v1>=0&&v1<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]=INFINITY;if(D[v]<INFINITY){p[v][v0]=1;p[v][v]=1;}}D[v0]=0;final[v0]=1;have[0]=v0;for(i=1;i<G->vexnum;++i){min=INFINITY;for(w=0;w<G->vexnum;++w)if(!final[w])if(D[w]<min){v=w;min=D[w];}final[v]=1;have[k]=v;k++;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(i=0;i<G->vexnum;i++){if(p[v1][have[i]]==1){printf("-->%s",G->vexs[have[i]].name);}}if((v1-v0)==1)printf("\n路径长度:%d\n",G->arcs[v0][v1]);else printf("\n路径长度:%d\n",D[v1]);}um,G->vexs[k].name,G->vexs[k].introduction);printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");}择出发点和目的地┃\n");printf(" ┃ y.查看景点信息┃\n");printf(" ┃ z.退出系统┃\n");printf(" ┗━━━━━━━━━━━━━━━━━━━━┛\n");printf("请选择服务");}/*MGraph函数(图的构建)*/MGraph InitGraph(void){MGraph G;int i,j;=17; um=i;strcpy[0].name,"学校北门");strcpy[0].introduction,"学校的正门,气势宏伟");strcpy[1].name,"宿舍楼1");strcpy[1].introduction,"睡觉的地方");strcpy[2].name,"宿舍楼2");strcpy[2].introduction,"睡觉的地方");strcpy[3].name,"宿舍楼15");strcpy[3].introduction,",,,,,,,,");strcpy[4].name,"九月桥");strcpy[4].introduction,"连接生活区和教学区的桥。
Java实现的具有GUI的校园导航系统0.写在前⾯2020-5-18 更新这个东西已经是两年前的了,现在问我具体细节我也不是很清楚了,⽽且现在review两年前的代码感觉写的好烂。
请⼤家有问题下⾯留⾔,不要加我的企鹅了,正在准备考研,⽐较忙。
⼀点建议:1.当时会的⽐较少,对象实例化对于单纯的数据查询来说效率极低⽽且很蠢,我现在更建议使⽤数据库,或者简单点⽤xml or json都可以,建议想写的好⼀点的同学把⾥⾯的数据读写逻辑改⼀改,⽤数据库不⾹吗2.这个是分客户端服务端的,服务端相当于⽤底层⼿撸了⼀个相当简单的tomcat,所有的界⾯都是要从Client进去的。
先开server再开Client,在注册时以邀请码判断是否为管理员。
以管理员⾝份进⼊client之后再去添加信息。
3.如果注册时报access is denied 在Flie的路径下加⼀层⽂件夹,如下⼩⼀个⽉没更新博客了,主要是临近期末,各科的⼤作业都下来了,今天把⾃⼰奋⽃了⼀个礼拜的校园导航系统贴在上⾯,也算满⾜下⾃⼰的⼩成就感('ᴗ' )و实验要求如下:以我校为例,设计⼀个校园导航系统,主要为来访的客⼈提供信息查询。
系统有两类登陆账号,⼀类是游客,使⽤该系统⽅便校内路线查询;⼀类是管理员,可以使⽤该系统查询校内路线,可对校园景点路线可编辑。
说简单点,就是给定⼀个地图数据,然后地图上有好⼏个点,每个点间有距离,这个程序提供了查询两点间最短路径的功能。
当然,你可以为他增加很多细节,⽐如查看景点信息啊,后台的管理啊等等,这些都是加分项。
⽼师推荐使⽤C,其实题⽬也是这么要求的。
但是使⽤C有⼏个⽐较⿇烦的问题:第⼀,要是只实现基本的功能⽤C的话肯定是没什么问题,但是要是想添枝加叶的话,C的代码就没法看了,写起来⿇烦读起来也难受。
第⼆,地图是有地图数据的,要是⽤C的话⼀般⼈都会直接printf N多⾏的地图吧,这也是⼀个⽐较⿇烦的事⼉。
好理爭院课程设计课程名称题目名称专业班级数据结构校园导航系统13软件工程二O—五年六月一日目录1弓I言 (5)1.1问题的提出 (5)1.2国内外研究的现状 (5)1.3任务与分析 (5)2程序的主要功能 (6)3程序运行平台 (6)4总体设计 (7)4.1数据结构类型定义 (7)4.2函数声明 (7)4.3创建导航图,即无向图 (8)4.4最短路径导航函数 (8)5程序方法的说明 (9)5.1主菜单 (9)5.2主函数 (10)5.3迪杰斯特拉算法实现 (13)6模块分析 (15)7系统测试 (15)7.1系统登录界面 (15)7.2 功能一:学校简介 (16)7.3功能二:两点最短距离导航 (16)7.4功能三:某点到其他所有点的最短距离 (17)7.5功能四:显示全校地图 (17)7.5退出导航系统 (18)8结论 (19)附录: (19)蚌埠学院计算机科学与技术系本科课程设计成绩评定表附件4分工协作说明(以列表形式具体说明每个人所做的工作);1.1问题的提出设计一个校园导航系统,为来访的客人提供各种信息查询服务。
1.2国内外研究的现状这个问题一直是国内外研究的热门话题。
1.3任务与分析设计你的学校的平面图,至少包括8个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径(最短路径)2程序的主要功能(1)设计校园平面图,在校园景点选8个左右景点。
以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等有关信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供任意景点的问路查询,即查询任意两个景点之间的一条最短路径。
3程序运行平台计算机wi ndows7 Virtual C++ 6.0最大顶点个数 最大值4总体设计4.1数据结构类型定义#i nclude<stdio.h> #include <stdlib.h> #i nclude <stri ng.h> #defi ne MAX_V 30 //#define INFINITY 32767 //typedef struct {char* vexs[MAX_V]; // 顶点向量 int arcs[MAX_V][MAX_V];〃 邻接矩阵in t vex nu m,arcnum;〃 图的当前顶点数和弧数}MGraph;4.2函数声明int CreateUDN(MGraph & G); // 创建导航图函数声明extern have[30];void ShortPath(MGraph & G,i nt vO,i nt p[MAX_V][MAX_V],i nt d[]);〃 短路径导航函数声明 int have[30]; void men u(); //导航菜单函数声明void show1(); // 显示全校面貌int jianjie();〃读取文件4.3创建导航图,即无向图int CreateUDN(MGraph &G)函数描述:主要将每个节点进行命名,每个定点到其他所有定点的路径值用邻接矩阵进行存储。
#define INFINITY 10000#define MAX_VERTEX_NUM 40#define MAX 40#include<>#include<>#include<>#include<>typedef struct ArCell{int adj; /*路径长度*/}ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct/*图中顶点表示主要景点,存放景点的编号、名称、简介等信息, */ {char name[30];int num;char introduction[100];/*简介*/}infotype;typedef struct({infotype vexs[MAX_VERTEX_NUM];AdjMatrix arcs;int vexnum,arcnum;}MGraph;MGraph b;void cmd(void);MGraph InitGraph(void);void show1();(void list();void Menu(void);void ShortestPath_DIJ(MGraph * G);void Search(MGraph *G);int LocateVex(MGraph *G,char* v);/**********主函数************************/void main(void){system("color 5f"); /*修改控制台的颜色信息,改为白字蓝底的模式*/ system("mode con: cols=140 lines=130"); /*设置批处理运行时窗口大小的*/ "cmd();}/********自定义函数***************//* cmd函数(根据目录选择要进行的项目)*/void cmd(void){char k;b=InitGraph();show1();Menu();~while(1){scanf("\n%c",&k);switch(k){case'x':system("cls");show1();Menu();list();;ShortestPath_DIJ(&b);printf("---------------------------------欢迎您的使用--------------------------------\n");printf("\n请您继续选择服务:");break;case'y':system("cls");Menu();list();Search(&b);printf("---------------------------------欢迎您的使用--------------------------------\n"); (printf("\n请您继续选择服务:");break;case'z':system("cls");printf(" ┏━━━━━━━━━━━━━━━━━━━━┓\n");printf(" ┃感谢使用┃\n");printf(" ┃安徽建筑术大学┃\n");printf(" ┃智能导航系统┃\n");printf(" ┗━━━━━━━━━━━━━━━━━━━━┛\n");exit(0);~default:printf("输入信息错误!\n请输入x或y或z.\n");break;}}}/* 迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点*/void ShortestPath_DIJ(MGraph * G)]{int v,w,i,min,t=0,x,flag=1,v0,v1,have[100],k;int final[20], D[20], p[23][23];while(flag){printf("请输入起始景点编号:\n");scanf("%d",&v0);if(v0<0||v0>G->vexnum)printf("景点编号不存在!");,printf("请输入终止景点编号:\n");scanf("%d",&v1);if(v1<0||v1>G->vexnum)printf("景点编号不存在!");if(v0>=0&&v0<G->vexnum&&v1>=0&&v1<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]=INFINITY;if(D[v]<INFINITY){p[v][v0]=1;p[v][v]=1;}}>D[v0]=0;final[v0]=1;have[0]=v0;for(i=1;i<G->vexnum;++i){min=INFINITY;for(w=0;w<G->vexnum;++w)if(!final[w])if(D[w]<min){{v=w;min=D[w];}final[v]=1;have[k]=v;k++;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(i=0;i<G->vexnum;i++){if(p[v1][have[i]]==1){printf("-->%s",G->vexs[have[i]].name);}}…if((v1-v0)==1)printf("\n路径长度:%d\n",G->arcs[v0][v1]);else printf("\n路径长度:%d\n",D[v1]);}um,G->vexs[k].name,G->vexs[k].introduction);printf("┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");}择出发点和目的地┃\n");printf(" ┃y.查看景点信息┃\n"); printf(" ┃z.退出系统┃\n"); printf(" ┗━━━━━━━━━━━━━━━━━━━━┛\n"); printf("请选择服务");~}/*MGraph函数(图的构建)*/MGraph InitGraph(void){MGraph G;int i,j;=17; um=i;strcpy[0].name,"学校北门");strcpy[0].introduction,"学校的正门,气势宏伟");strcpy[1].name,"宿舍楼1");¥strcpy[1].introduction,"睡觉的地方");strcpy[2].name,"宿舍楼2");strcpy[2].introduction,"睡觉的地方");strcpy[3].name,"宿舍楼15");strcpy[3].introduction,",,,,,,,,");strcpy[4].name,"九月桥");strcpy[4].introduction,"连接生活区和教学区的桥。
");strcpy[5].name,"主教楼");strcpy[5].introduction,"教学,开会");strcpy[6].name,"图书馆");strcpy[6].introduction,"安静当学霸的地方");strcpy[7].name,"日月广场");strcpy[7].introduction,"有漂亮喷泉的广场");strcpy[8].name,"体育场");strcpy[8].introduction,"运动健身的地方");strcpy[9].name,"还在建");strcpy[9].introduction,"学校新修的实验楼,灰常高大上"); strcpy[10].name,"南食堂");strcpy[10].introduction,"不好吃");for(i=0;i<;i++)…for(j=0;j<;j++)[i][j].adj=INFINITY;[0][1].adj=50;[1][2].adj=15;[1][3].adj=40;[2][3].adj=30;[0][3].adj=90;[3][4].adj=30;[4][9].adj=1000;[4][5].adj=20;`[5][6].adj=10;[6][7].adj=8;[6][8].adj=12;[7][8].adj=7; [0][9].adj=30;[9][10].adj=500;[10][11].adj=25;[11][12].adj=8;[12][13].adj=5;[13][14].adj=10;[12][14].adj=10;[14][15].adj=150;[15][16].adj=3;[5][15].adj=150;[4][15].adj=30;[1][11].adj=300;[8][14].adj=40; for(i=0;i<;i++)for(j=0;j<;j++) [j][i].adj=[i][j].adj; return G;}//InitGraph end。