📄 咨询1.txt
字号:
校园导游咨询
[问题描述] 设计一个校园导游程序,为来访的客人提供各种信息查询服务。
[基本要求]
(1)设计你的学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点相关信息的查询。
(3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
[实现提示] 一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网含有相关信息。
#include "stdio.h"
#define null 0
#define num 20
#define maxdist 10000
typedef 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,w;
for(j=0;j<n;j++)
{d[j]=g.edges[j];
s[j]=0;
if((d[j]<maxdist)&&(d[j]!=0))
p[j]=i;
else
p[j]=-1;
}
s=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=1;
for(k=0;k<n;k++)
if(s[k]==0)
{dist=d+g.edges[k];
if(dist<d[k])
{d[k]=dist;
p[k]=u;
}
}
}
}
void opdijk(int v0,int n,int d[],int p[])
{int i,j,k,pre;
for(i=0;i<n;i++)
if(i!=v0)
{printf("\n%d",i);
pre=p;
while(pre!=-1)
{printf("<--%d",pre);/****************************/
pre=p[pre];
}
if(d==maxdist)
printf("<--%d",v0);
printf("\tshortestway:%d",d);
}
}
void floyd(graph g,int n,int d[][num],int p[][num])
{int i,j,k,w;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{d[j]=g.edges[j];
if((d[j]<maxdist)&&(d[j]!=0))
p[j]=j;
else
p[j]=-1;
}
for(i=0;i<n;i++)
d=0;
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(d[j]>d[k]+d[k][j])
{d[j]=d[k]+d[k][j] ;
p[j]=p[k];
}
}
void opfloy(int n,int d[][num],int path[][num])
{int i,j,k,c,min,next;
for(i=0;i<n;i++)
{printf("\n\nyuandian is v%d:",i);
for(j=0;j<n;j++)
if(j!=1)
{printf("\nthe shortest way from%dto%dis:\n",i,j);
printf("%d",i);
next=path[j];
while(next!=-1)
{printf("->%d",next);
next=path[next][j];
}
if(d[j]==maxdist)
printf("<-%d",j);/***************************/
printf("\t%d",d[j]);
}
}
}
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[j]=maxdist;
for(j=0;j<n;j++)
g.edges[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@126.com\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':clrscr();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();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -