📄 1.cpp
字号:
/********************************************************************/
#define DINGYILG 10000
#define MAX_LENGH_NUM 40
#define MAX 40
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
#include<string.h>
/********************************************************************/
typedef struct JingDianCD /*景点长度信息函数的定义*/
{
int lengh;
}JingDianCD,LenghCD[MAX_LENGH_NUM][MAX_LENGH_NUM];
typedef struct /*景点名字和简介函数的定义*/
{
char name[30];
int num;
char information[100];
}infotype;
typedef struct
{
infotype xinxiNI[MAX_LENGH_NUM];
LenghCD xinxiLG;
int NINumber,LGNumber;
}JingDian;
JingDian b;
/********************************************************************/
void XuanZe(void); /*函数的声明*/
JingDian XinXi(void);
void Menu(void);
void LiuLanQJ(JingDian *X);
void ChaKanLX(JingDian *X);
void ChaKanJD(JingDian *X);
/********************************************************************/
void XuanZe(void) /*选择函数的定义*/
{
int i;
b=XinXi();
Menu();
scanf("%d",&i);
while(i!=4) /*while循环语句*/
{ /*当不等于4时,继续循环,当大于4小于1时选择错误*/
switch(i)
{
case 1:system("cls");LiuLanQJ(&b);Menu();break;
case 2:system("cls");ChaKanLX(&b);Menu();break;
case 3:system("cls");ChaKanJD(&b);Menu();break;
case 4:exit(1);break;
default:break;
}
if(i<=0||i>4)
{
printf("选择错误,请重新选择!\n");
}
scanf("%d",&i);
}
}
/********************************************************************/
JingDian XinXi(void) /*景点信息的定义*/
{
JingDian X;
int i,j;
X.NINumber=10;
X.LGNumber=14;
for(i=0;i<X.NINumber;i++)
X.xinxiNI[i].num=i;
strcpy(X.xinxiNI[0].name,"华德大饭店");
strcpy(X.xinxiNI[0].information,"1、2、3、4食堂");
strcpy(X.xinxiNI[1].name,"实训楼");
strcpy(X.xinxiNI[1].information,"计算机系学生上实验课的教学楼,各种设施齐全");
strcpy(X.xinxiNI[2].name,"1、2号学生宿舍楼");
strcpy(X.xinxiNI[2].information,"全校女生宿舍楼");
strcpy(X.xinxiNI[3].name,"致远峰");
strcpy(X.xinxiNI[3].information,"人造假山和人工湖,致远山水甲天下!");
strcpy(X.xinxiNI[4].name,"图书馆");
strcpy(X.xinxiNI[4].information,"藏书万册,设施良好,3楼为自习室,环境幽雅");
strcpy(X.xinxiNI[5].name,"华德大运动场");
strcpy(X.xinxiNI[5].information,"椭圆形黄土跑道,致使开运动会时环境极其恶劣!");
strcpy(X.xinxiNI[6].name,"思源大广场");
strcpy(X.xinxiNI[6].information,"绿树成荫,适宜休息和读书");
strcpy(X.xinxiNI[7].name,"主教学楼");
strcpy(X.xinxiNI[7].information,"学院最大的教学楼,共5层,环形建筑,适宜学习");
strcpy(X.xinxiNI[8].name,"汽配楼");
strcpy(X.xinxiNI[8].information,"汽车系学生上课的主教学楼,有浓烈汽油味");
strcpy(X.xinxiNI[9].name,"华德正门");
strcpy(X.xinxiNI[9].information,"耗资巨大的门面,比较具有观赏性!");
for(i=0;i<X.NINumber;i++) /*景点长度的定义*/
for(j=0;j<X.NINumber;j++)
X.xinxiLG[i][j].lengh=DINGYILG;
X.xinxiLG[0][1].lengh=400;
X.xinxiLG[0][2].lengh=20;
X.xinxiLG[0][6].lengh=40;
X.xinxiLG[1][7].lengh=100;
X.xinxiLG[2][3].lengh=120;
X.xinxiLG[3][6].lengh=100;
X.xinxiLG[3][4].lengh=400;
X.xinxiLG[4][5].lengh=100;
X.xinxiLG[4][9].lengh=250;
X.xinxiLG[5][9].lengh=300;
X.xinxiLG[6][7].lengh=60;
X.xinxiLG[6][9].lengh=200;
X.xinxiLG[7][8].lengh=100;
X.xinxiLG[8][9].lengh=200;
for(i=0;i<X.NINumber;i++)
for(j=0;j<X.NINumber;j++)
X.xinxiLG[j][i].lengh=X.xinxiLG[i][j].lengh;
return X;
}//XinXi end
/********************************************************************/ /*菜单函数的定义*/
void Menu()
{
printf("\n 哈工大华德学院导游图\n");
printf(" \n");
printf(" 1.浏览校园全景 \n");
printf(" 2.查看所有游览路线 \n");
printf(" 3.查看景点信息 \n");
printf(" 4.退出系统 \n");
printf(" \n");
printf("请输入所需操作代号:");
}
/********************************************************************/
void LiuLanQJ(JingDian *X) /*浏览校园全景函数的定义*/
{
int v;
printf("\n");
printf("编号景点名称 简介 \n");
for(v=0;v<X->NINumber;v++) /*for循环寻找适合景点*/
printf("%-4d%-16s%-56s\n",X->xinxiNI[v].num,X->xinxiNI[v].name,X->xinxiNI[v].information);
printf("\n");
}
/********************************************************************/
void ChaKanLX(JingDian * X) /*查看所有浏览路线函数的定义*/
{
int v,w,i,min,t=0,x,flag=1,v0;
int final[20], D[20], p[20][20];
while(flag)
{
printf("请输入一个起始景点编号:");
scanf("%d",&v0);
if(v0<0||v0>X->NINumber) /*if语句判断输入是否正确*/
{
printf("景点编号不存在!请重新输入景点编号:");
scanf("%d",&v0);
}
if(v0>=0&&v0<X->NINumber)
flag=0;
}
for(v=0;v<X->NINumber;v++) /*for循环语句依次输出各景点信息,名称和简介*/
{
final[v]=0;
D[v]=X->xinxiLG[v0][v].lengh;
for(w=0;w<X->NINumber;w++)
p[v][w]=0;
if(D[v]<DINGYILG)
{
p[v][v0]=1;p[v][v]=1;
}
}
D[v0]=0;final[v0]=1;
for(i=1;i<X->NINumber;i++) /*for循环语句依次累加各景点的长度并且输出*/
{
min=DINGYILG;
for(w=0;w<X->NINumber;w++)
if(!final[w])
if(D[w]<min){v=w;min=D[w];}
final[v]=1;
for(w=0;w<X->NINumber;w++)
if(!final[w]&&(min+X->xinxiLG[v][w].lengh<D[w]))
{
D[w]=min+X->xinxiLG[v][w].lengh;
for(x=0;x<X->NINumber;x++)
p[w][x]=p[v][x];
p[w][w]=1;
}
}
for(v=0;v<X->NINumber;v++)
{
if(v0!=v) printf("%s",X->xinxiNI[v0].name);
for(w=0;w<X->NINumber;w++)
{
if(p[v][w]&&w!=v0) printf("-->%s",X->xinxiNI[w].name);
t++;
}
if(t>X->NINumber-1&&v0!=v)printf(" 总路线长%dm\n\n",D[v]);
}
}//ChaKanLX end
/********************************************************************/
void ChaKanJD(JingDian *X) /*查看景点信息函数的定义*/
{
int k,flag=1;
while(flag)
{
printf("请输入要查询的景点编号:");
scanf("%d",&k);
if(k<0||k>X->NINumber)
{
printf("景点编号不存在!请重新输入景点编号:");
scanf("%d",&k);
}
if(k>=0&&k<X->NINumber)
flag=0;
}
printf("\n"); /*输出景点信息*/
printf("编号景点名称 简介 \n");
printf("%-4d%-16s%-56s\n",X->xinxiNI[k].num,X->xinxiNI[k].name,X->xinxiNI[k].information);
printf("\n");
}//ChaKanJD end
/********************************************************************/
void main(void) /*定义主函数*/
{
system("color 1f");
system("mode con: cols=100 lines=40");
XuanZe();
}
/********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -