本文为校园周游系统,我自己做了一个见到的校园布局图,可以直接使用,已通过验收。
题目:校园周游
背景:
目前杭州旅游业蒸蒸日上,越来越多的人来我们学校参观,因此本程序设计一个校园周游导航系统为参观者服务。
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
int map[20][20]; //存放各点间距离
int pre[20][20]; //存放路径
void list() //主菜单
{
system("cls");
printf("\n");
printf("\t\t 欢迎使用hdu导游系统 \n");
printf("\t\t --------------------------------------------\n");
printf("\t\t| |\n");
printf("\t\t| |\n");
printf("\t\t| |\n");
printf("\t\t| 1.显示校园平面图. |\n");
printf("\t\t| 2.校门口到各个场所的最短路径. |\n");
printf("\t\t| 3.查询信息 |\n");
printf("\t\t| 4.退出 |\n");
printf("\t\t| |\n");
printf("\t\t| |\n");
printf("\t\t --------------------------------------------\n");
printf("\n\t\t 请输入您要进行的操作的序号 \n");
}
void view(){
system("cls");
printf("\n");
printf(" 【学校地图】\n");
printf("一横段代表10,竖和斜断代表50 \n");
printf("2--------1 \n");
printf("| | \n");
printf("10-------3--------4 \n");
printf("| | / \n");
printf("9-----8--5-6----7 \n");
printf("按任意键返回主菜单.\n");
getch();
list();
}
void cha(){
int a;
printf("请输入查询地点:");
scanf("%d",&a);
printf("%d号景点环境优美,历史悠久,具有60年的历史\n",a);
printf("输入任意键返回\n");
getch();
list();
}
void floyd() //弗洛伊德算法求最短路
{
int i,j,k;
for(k = 1;k <= 10;k ++)
{
for(i = 1;i <= 10;i ++)
{
if( i == k || map[i][k]==-1 ) continue;
for(j = 1;j <= 10;j ++)
{
if( k == j || i == j || map[k][j] == -1 ) continue;
int tmp = map[i][k] + map[k][j];
if(map[i][j] == -1 || map[i][j] > tmp)
{
map[i][j] = tmp;
pre[i][j] = pre[i][k];
}
else if(map[i][j] == tmp && pre[i][k] < pre[i][j])
{
pre[i][j]=pre[i][k];
}
}
}
}
}
void Initiate( ) //初始化map[]和pre[],存放map[]的距离
{
int i,j;
for(i = 1;i <= 10;i ++)
{
for(j = 1;j <= 10;j ++)
{
pre[i][j] = j;
if(i==j) map[i][j] = 0;
else
map[i][j] = -1;
}
}
map[1][2] = map[2][1] = 80;
map[1][3] = map[3][1] = 50;
map[3][4] = map[4][3] = 80;
map[3][5] = map[5][3] = 50;
map[5][6] = map[6][5] = 10;
map[6][7] = map[7][6] = 40;
map[5][8] = map[8][5] = 20;
map[4][7] = map[7][4] = 50;
map[9][8] = map[8][9] = 50;
map[10][9] = map[9][10] = 50;
map[2][10] = map[10][2] = 50;
map[3][10] = map[10][3] = 70;
}
void lu(int x,int y) //输出起点到终点的路径
{
int tal,lu;
printf("路径: %d",x);
lu=map[x][y];
while(pre[x][y] != y)
{
printf("--> ");
printf("%d",pre[x][y]);
x = pre[x][y];
}
printf("--> ");
printf("%d",y);
printf("\n路径长度为%d\n",lu);
}
void zd(){
system("cls");
int strat,end;
printf("2--------1 \n");
printf("| | \n");
printf("10-------3--------4 \n");
printf("| | / \n");
printf("9-----8--5-6----7 \n");
printf("请选择起点的景点(1-10): ");
scanf("%d",&strat);
printf("\n");
printf("请选择终点的景点(1-10): ");
scanf("%d",&end);
printf("\n");
if(strat != end)
{
lu(strat,end);
printf("\n");
}
else
{
printf("起点与终点相同.\n");
}
printf("按任意键返回.\n");
getch();
}
int main( )
{
int flag = 0;
while( flag==0 )
{
list();
int n;
scanf("%d",&n);
Initiate();
floyd();
switch(n)
{
case 1: view();break;
case 2: zd();break;
case 3: cha();break;
case 4: flag = 1;break;
default : list();break;
}
}
return 0;
}
结果展示及分析

菜单展示



5万+





