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

📄 公园导航图彭敏2.cpp

📁 给出一张某公园的导游图
💻 CPP
字号:
# include<stdio.h> 
# include<process.h>

/*定义符号常量*/
#define INT_MAX 10000
#define n 10                      

/*定义全局变量*/
int cost[n][n];/* 边的值*/
int shortest[n][n];/* 两点间的最短距离*/
int path[n][n];/* 经过的景点*/

/*自定义函数原型说明*/
void introduce();
int shortestdistance();
void floyed(); 
void display(int i,int j);

void main() 
{/*主函数*/
 int i,j; 
 char k; 
 for(i=0;i<=n;i++)
 for(j=0;j<=n;j++)
 cost[i][j]=INT_MAX; 
 cost[1][2]=cost[2][1]=20;
 cost[2][3]=cost[3][2]=10;
 cost[2][4]=cost[4][2]=20;
 cost[3][4]=cost[4][3]=40;
 cost[1][4]=cost[4][1]=40;
 cost[2][5]=cost[5][2]=30;
 cost[5][10]=cost[10][5]=80;
 cost[5][6]=cost[6][5]=20;
 cost[6][7]=cost[7][6]=10;
 cost[7][8]=cost[8][7]=30;
 cost[7][9]=cost[9][7]=30;
 cost[8][9]=cost[9][8]=40;
 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;
 while(1)
 { 
 printf("----------------欢迎使用柳侯公园导游系统!----------------\n");
 printf("1.景点信息查询………请按 i (introduc)键\n");
 printf("2.景点最短路径查询…请按 s (shortestdistance)键\n");
 printf("3.退出系统……………请按 e (exit)键\n");
 printf("公园景点列表:\n");
 printf("1:公园北门 ");
 printf("2:柳侯山 ");
 printf("3:柳侯池 ");
 printf("4:天新游乐广场 ");
 printf("5:心灵桥\n");
 printf("6: 植物园林");
 printf("7:许愿池 ");
 printf("8:宫阙楼 ");
 printf("9:柳侯住宿馆 ");
 printf("10:柳侯餐厅\n");
 printf("请选择服务:");
 scanf("\n%c",&k); 
 switch(k) 
 { 
 case 'i':
 printf("进入景点信息查询:");
 introduce();
 break; 
 case 's':
 printf("进入最短路径查询:");
 shortestdistance();
 break; 
 case 'e':
 exit(0); 
 default:
 printf("输入信息错误!\n请输入字母i或s或e.\n");
 break; 
 } 
 } 
}/*main*/

void introduce()
{/*景点介绍*/
 int a;
 printf("您想查询哪个景点的详细信息?请输入景点编号:");
 scanf("%d",&a);
 getchar();
 printf("\n");
 switch(a)
 {
 case 1: 
 printf("1:公园北门\n      公园的北门,前面竖立着一尊柳宗元的石像,气势宏伟。\n");break;
 case 2: 
 printf("2:柳侯山\n        柳侯山以自然景观为特色的旅游风景点,倍受游人称赞。\n");break; 
 case 3:   
 printf("3:柳侯池\n        柳侯池,池水清澈见底,给人以清新的爽感。\n");break; 
 case 4: 
 printf("4:天新游乐广场\n  娱乐场所,里面设施齐全。\n");break; 
 case 5: 
 printf("5:心灵桥\n        公园主要景点之一,传说情人在桥上可以进行心灵的沟通。\n");break; 
 case 6: 
 printf("6:植物园林\n      公园主要景点之一,里面有上百种花草,给人心旷神怡的感觉。\n");break; 
 case 7:
 printf("7:许愿池\n        公园主要景点之一,传说在池中许下愿望就能实现。\n");break; 
 case 8: 
 printf("8:宫阙楼 \n       公园主要景点之一,建筑风格奇特,是少有的欧派建筑。\n");break; 
 case 9: 
 printf("9:柳侯住宿馆\n    公园接待游人的酒店,属五星级酒店。\n");break; 
 case 10: 
 printf("10:柳侯餐厅\n     公园最大的食堂。\n");break; 
 default:
 printf("景点编号输入错误!请输入1->10的数字编号!\n"); break; 
 }
}/*introduce*/

int shortestdistance()
{/*要查找的两景点的最短距离*/
 int i,j; 
 printf("请输入要查询的两个景点的编号(1->10的数字编号并用','间隔):");
 scanf("%d,%d",&i,&j);
 if(i>n||i<=0||j>n||j<0)
 {
 printf("输入信息错误!\n\n");
 printf("  请输入要查询的两个景点的编号(1->10的数字编号并用','间隔):\n");
 scanf("%d,%d",&i,&j);
 }
 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");
 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)最短距离是:%d米\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)最短距离是:%5d米\n\n",a,b,shortest[a][b]);
 } 
 } 
 else
 printf("输入错误!不存在此路!\n\n");
 printf("\n");
}/*display*/

⌨️ 快捷键说明

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