⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 daoyou.cpp

📁 校园导游咨询:编制一个为来访客人进行最短路径导游的程序从厦门大学漳州校区的平面图中选取10个有代表性的景点
💻 CPP
字号:
#include "fun.h"
void Initialization(){
	for(int i=0;i<=n;i++)
	for(int j=0;j<=n;j++)
	cost[i][j]=INT_MAX; 
	cost[1][2]=cost[2][1]=10;
	cost[1][3]=cost[3][1]=2;
	cost[2][3]=cost[3][2]=9;
	cost[2][4]=cost[4][2]=1;
	cost[3][4]=cost[4][3]=8;
	cost[2][4]=cost[4][2]=6;
	cost[4][5]=cost[5][4]=3;
	cost[1][6]=cost[6][1]=3;
	cost[1][8]=cost[8][1]=2;
	cost[6][8]=cost[8][6]=2;
	cost[7][8]=cost[8][7]=6;
	cost[3][8]=cost[8][3]=1;
	cost[4][7]=cost[7][4]=3;
	cost[6][9]=cost[9][6]=4;
	cost[1][9]=cost[9][1]=1;
	cost[10][7]=cost[7][10]=1;
	cost[1][1]=cost[2][2]=cost[3][3]=cost[4][4]=cost[5][5]=0; 
	cost[6][6]=cost[7][7]=cost[8][8]=cost[9][9]=cost[10][10]=0;
}

void main() 
{
	Initialization();
	char k;  
	while(1)
	{ system("cls");//清屏
	printf("----------------厦门大学漳州校区导游系统!----------------\n");
	printf("\n1.景点信息查询………请按 1\n");
	printf("\n2.景点最短路径查询…请按 2\n");
	printf("\n3.退出系统……………请按 0\n");
	printf("\n学校景点列表:\n");
	printf("\n1:学校北门		");
	printf("2:学校南门		");
	printf("3:体育馆		");
	printf("4:嘉庚楼		\n");	
	printf("5:嘉庚学院		");
	printf("6:宿舍楼		");
	printf("7:中部生活区		");
	printf("8:食堂\n");
	printf("\n9:学校宾馆		");
	printf("10:芙蓉湖\n");
	printf("\n请选择服务:");
	scanf("\n%c",&k); 
	switch(k) 
	{ 
	case '1':
	printf("\n进入景点信息查询:");
	introduce();
	printf("\n按任意键继续。。");
	fflush(stdin);
	getchar();
	break; 
	case '2':
	printf("\n进入最短路径查询:");
	shortestdistance();
	printf("\n按任意键继续。。");
	fflush(stdin);
	getchar();
	break; 
	case '0':
	exit(0); 
	default:
	printf("\n输入信息错误!   请输入字母0或1或2.\n");
	printf("\n按任意键继续。。");
	fflush(stdin);
	getchar();
	break; 
	} 
 } 
}/*main*/

void introduce()
{/*景点介绍*/
 int a;
 printf("\n\n请输入您想查询的景点编号:");
 scanf("%d",&a);
 getchar();
 printf("\n");
 switch(a)
 {
 case 1: 
 printf("1:学校北门\n\n  方便北区学生进出。\n\n");break;
 case 2: 
 printf("2:学校南门\n\n  学校的正门。\n\n");break; 
 case 3: 
 printf("3:体育馆\n\n  内设游泳馆,对面是操场,学生运动的集中场所。\n\n");break; 
 case 4: 
 printf("4:嘉庚楼\n\n		学校的教学楼,其中嘉庚三是图书馆。\n\n");break; 
 case 5: 
 printf("5:嘉庚学院\n\n		厦大的一个私立学院。\n\n");break; 
 case 6: 
 printf("6:宿舍楼\n\n		公寓式的学生宿舍,设施完备。\n\n");break; 
 case 7: 
 printf("7:食堂\n\n		学校最大的食堂。\n\n");break; 
 case 8: 
 printf("8:中部生活区\n\n  新建成的食堂,宿舍,教学楼。\n\n");break; 
 case 9: 
 printf("9:学校宾馆\n\n  环境优雅,其中一楼是食堂。\n\n\n");break; 
 case 10: 
 printf("10:芙蓉湖\n\n  学校最漂亮的风景之一。\n\n");break; 
 default:
 printf("景点编号输入错误!请输入1->10的数字编号!\n\n"); break; 
 }
}/*introduce*/

int shortestdistance()
{/*要查找的两景点的最短距离*/
 int i,j; 
 printf("\n\n请输入要查询的两个景点的编号,并用','间隔:");
 scanf("%d,%d",&i,&j);
 if(i>n||i<=0||j>n||j<0)
 printf("\n输入信息错误!\n\n");
 else
 {
 floyed();
 display(i,j);
 }
 return 1;
}/*shortestdistance*/

void floyed()
{/*用floyed算法求两个景点的最短路径*/
 int i,j,k; 
 for(i=1;i<=n;i++) 
 for(j=1;j<=n;j++) 
 {
 shortest[i][j]=cost[i][j];
 path[i][j]=0; 
 }
 for(k=1;k<=n;k++) 
 for(i=1;i<=n;i++) 
 for(j=1;j<=n;j++)
 if(shortest[i][j]>(shortest[i][k]+shortest[k][j])) 
 {/*用path[][]记录从i到j的最短路径上点j的前驱景点的序号*/
 shortest[i][j]=shortest[i][k]+shortest[k][j];
 path[i][j]=k;
 path[j][i]=k;
 } 
}/*floyed*/

void display(int i,int j)
{/* 打印两个景点的路径及最短距离 */
 int a,b;
 a=i;
 b=j;
 printf("\n您要查询的两景点间最短路径是:\n\n");
 if(shortest[i][j]!=INT_MAX)
 {
 if(i<j)
 { 
 printf("%d",b);
 while(path[i][j]!=0)
 {/* 把i到j的路径上所有经过的景点按逆序打印出来*/
 printf("<-%d",path[i][j]);
 if(i<j)
 j=path[i][j]; 
 else 
 i=path[j][i];
 } 
 printf("<-%d",a);
 printf("\n\n"); 
 printf("(%d->%d)最短距离是:%d00米\n\n",a,b,shortest[a][b]);
 }
 else 
 {
 printf("%d",a);
 while(path[i][j]!=0)
 {/* 把i到j的路径上所有经过的景点按顺序打印出来*/
 printf("->%d",path[i][j]);
 if(i<j)
 j=path[i][j]; 
 else 
 i=path[j][i]; 
 } 
 printf("->%d",b);
 printf("\n\n"); 
 printf("(%d->%d)最短距离是:%5d00米\n\n",a,b,shortest[a][b]);
 } 
 } 
 else
 printf("输入错误!不存在此路!\n\n");
 printf("\n");
}/*display*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -