| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1745 人关注过本帖
标题:校园导游咨询
只看楼主 加入收藏
zhaosisijius
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2010-3-12
结帖率:40%
收藏
 问题点数:0 回复次数:4 
校园导游咨询
/**//*
                                    校园导游咨询
  [问题描述]   
          设计一个校园导游程序,为来访的客人提供各种信息查询服务。   
  [基本要求]   
          (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*/
搜索更多相关主题的帖子: 咨询 校园 导游 
2010-03-12 09:33
xnjd000
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-3-18
收藏
得分:0 
是有什么问题,编译好像报错
2010-03-18 11:01
linshijin
Rank: 2
来 自:厦门
等 级:论坛游民
帖 子:40
专家分:24
注 册:2010-12-8
收藏
得分:0 
程序有点小问题

情不知所起,一往情深
2010-12-08 17:29
cjh948
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-28
收藏
得分:0 
回复 楼主 zhaosisijius
程序的小问题修改了吗? 正确程序呢
2012-06-28 21:55
cjh948
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-6-28
收藏
得分:0 
回复 楼主 zhaosisijius
求最短路径时 为什么用floyed算法  而不用Dijkstra算法?  可以说说原因吗
2012-06-28 22:02
快速回复:校园导游咨询
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030355 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved