校园导游咨询

               

    代码不是我写的,在网上看写的不错就拖了下来,特别是记录路径的那段代码写的特别精彩!值得一阅

/**/ /*
                                    校园导游咨询
  [问题描述]   
          设计一个校园导游程序,为来访的客人提供各种信息查询服务。   
  [基本要求]   
          (1)设计你的学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。   
          (2)为来访客人提供图中任意景点相关信息的查询。   
          (3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。   
  [测试数据]   
          由个人根据实际情况自行指定。   
  [实现提示]   
          一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。顶点和边均含有相关信息。
*/


/**/ /*包含头文件*/
#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]=2;
    cost[
2][3]=cost[3][2]=1;
    cost[
2][4]=cost[4][2]=2;
    cost[
3][4]=cost[4][3]=4;
    cost[
1][4]=cost[4][1]=5;
    cost[
2][5]=cost[5][2]=3;
    cost[
5][10]=cost[10][5]=8;
    cost[
5][6]=cost[6][5]=2;
    cost[
6][7]=cost[7][6]=1;
    cost[
7][8]=cost[8][7]=3;
    cost[
7][9]=cost[9][7]=3;
    cost[
8][9]=cost[9][8]=4;
    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(
"----------------欢迎使用绍兴文理学院导游系统!---------------- ");
        printf(
"1.景点信息查询………请按 i (introduc)键 ");
        printf(
"2.景点最短路径查询…请按 s (shortestdistance)键 ");
        printf(
"3.退出系统……………请按 e (exit)键 ");
        printf(
"学校景点列表: ");
        printf(
"1:学校北门  ");
        printf(
"2:月明音乐楼    ");
        printf(
"3:体育馆    ");
        printf(
"4:美术楼    ");
        printf(
"5:传信桥 ");
        printf(
"6:志廉楼    ");
        printf(
"7:理工楼行    ");
        printf(
"8:政楼    ");
        printf(
"9:图书馆  ");
        printf(
"10:河西餐厅 ");
        printf(
"请选择服务:");
        scanf(
" %c",&k); 
        
switch(k) 
        
...
            
case 'i':
                printf(
"进入景点信息查询:");
                introduce();
                
break
            
case 's':
                printf(
"进入最短路径查询:");
                shortestdistance();
                
break
            
case 'e':
                exit(
0); 
            
default:
                printf(
"输入信息错误!请输入字母i或s或e. ");
                
break
        }
 
    }
 
}
/**/ /*main*/

void  introduce()
... {/**//*景点介绍*/
    
int a;
    printf(
"您想查询哪个景点的详细信息?请输入景点编号:");
    scanf(
"%d",&a);
    getchar();
    printf(
" ");
    
switch(a)
    
...{
        
case 1
            printf(
"1:学校北门   学校的正门,前面竖立着一尊鲁迅的石像,气势宏伟。 ");break;
        
case 2
            printf(
"2:体育馆   学生上体育课及运动的场地,设有田径场、足球场、篮球场等。 ");break
        
case 3
            printf(
"3:美术楼   美术学院所在地,内设美术展厅。 ");break
        
case 4
            printf(
"4:传信桥   学校连接河东河西的纽带,横跨风则江。 ");break
        
case 5
            printf(
"5:志廉楼   学校的主教学楼之一,以试验室为主。 ");break
        
case 6
            printf(
"6:理工楼   学校的主教学楼之一,是工学院与数理信息学院的教学楼。 ");break
        
case 7
            printf(
"7:行政楼   学校行政办公的主楼。 ");break
        
case 8
            printf(
"8:图书馆   学校信息资源中心,内设大量的自习室。 ");break
        
case 9
            printf(
"9:河西餐厅   学校最大的食堂。 ");break
        
case 10
            printf(
"10:月明音乐楼   蔡元培艺术学院所在地,一楼为音乐演播厅。 ");break
        
default:
            printf(
"景点编号输入错误!请输入1->10的数字编号! "); 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(
"输入信息错误! ");
        printf(
"  请输入要查询的两个景点的编号(1->10的数字编号并用','间隔): ");
        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(
"您要查询的两景点间最短路径是: ");
    
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(
" "); 
            printf(
"(%d->%d)最短距离是:%d米 ",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(
" "); 
            printf(
"(%d->%d)最短距离是:%5d米 ",a,b,shortest[a][b]);
        }
 
    }
 
    
else
        printf(
"输入错误!不存在此路! ");
    printf(
" ");
}
/**/ /*display*/
           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/qq_43678612/article/details/86316195
今日推荐