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

📄 main.c

📁 校园导航程序
💻 C
字号:
/*--------------------校园导游系统------------------*/ 
#include<stdio.h> 
#include<process.h> 
#define INT_MAX 1000000 
#define n 10 
	int cost[n][n];/* 边的值  */
	int shortest[n][n];/* 两点间的最短距离  */
	int path[n][n];/* 经过的景点的;  */
	void floyed(); 
	int display(int i,int j); 

void introduce()/* introduce of the palce  */
{
	int a; 
	printf("Place 1:南门\n"); printf("Place 2:图书馆\n"); printf("Place 3:行政楼\n"); 
	printf("Place 4:飞翔门\n"); printf("Place 5:大广场\n"); 
	printf("Place 6:ABC教学楼\n"); printf("Place 7:体育场\n"); 
	printf("Place 8:月亮湾\n"); printf("Place 9:English Coner\n"); 
	printf("Place 10:树人广场\n"); 
	do
	{ 
		printf("您想查询哪个景点的详细信息?请输入景点编号:"); 
		scanf("%d",&a); 
		getchar(); 
		switch(a) 
		{ 
			case 1: 
			printf("1 introduce:凯旋门\n凯旋门--学校北大门,风景秀丽。\n学校重要的交通枢纽。\n\n");break; 
			case 2: 
			printf("2 introduce:图书馆\n图书馆--学校信息资源中心,建筑格式新异下沙最大的图书馆\n适合学生自习学习。\n\n");break; 
			case 3: 
			printf("3 introduce:行政楼\n行政楼--学校行政中心,是学校标志性的建筑。\n在楼顶上可以俯瞰学校全景。\n\n");break; 
			case 4: 
			printf("4 introduce:飞翔门\n飞翔门--学校另一个标志性建筑,象雄鹰展翅。\n\n");break; 
			case 5: 
			printf("5 introduce:大广场\n大广场--学校最大的广场,建筑风格意外鲜明,\n\n");break; 
			case 6: 
			printf("6 introduce:ABC教学楼\n--学校唯一三幢连者着的教学楼\n建筑风格独特很方便学生。\n\n");break; 
			case 7: 
			printf("7 introduce:体育场\n--学生运动的好去处,设施齐全。\n风景独特。\n\n");break; 
			case 8: 
			printf("8 introduce:月亮湾\n月亮湾--休息的好去处\n视野开广,风景意外啊!\n\n");break; 
			case 9: 
			printf("9 introduce:English Coner\n学习英语的好去处\n\n\n");break; 
			case 10: 
			printf("Place 10 introduce:树人广场\n树人广场--休息学习的好去处也是观光的好地方\n\n");break; 
			default: printf("Error Input\nNo Place!\n\n"); break; 
		} 
	}
	while(a<0||a>=11); 
} 


void shortestdistance() /* 要查找的两景点的距离  */
{ 
	int i,j; 
	printf("请输入要查询的两个景点的编号(用','间隔):\n"); 
	scanf("%d,%d",&i,&j); 
	while(i>n||i<=0||j>n||j<0) 
	{ 
		printf("Error(错误)!Error Code:%d,%d\n\n\n",i,j); 
		printf("请输入要查询的两个景点的编号(用','间隔):\n"); 
		scanf("%d,%d",&i,&j); 
	} 
	floyed(); 
	display(i,j); 
} 

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*/ 



int display(int i,int j)/* 打印两个景点的路径及最短距离  */
{
	int a,b;a=i;b=j; 
	printf("您要查询的两景点间最短路径是:\n"); 
	if (shortest[i][j]!=INT_MAX) 
	{
		if(i<j)
		{ 
			printf("Palce%d",b); 
			while(path[i][j]!=0)/* 把i到j的路径上所有经过的景点按逆序打印出来  */
			{ 
				printf("<-Palce%d",path[i][j]); 
				if(i<j) 
				j=path[i][j]; 
				else 
				i=path[j][i]; 
			} 
			printf("<-Palce%d",a); 
			printf("\n"); 
			printf("(Palce%d->Palce%d)最短距离是:%5d米",a,b,shortest[a][b]); 
		}
		else 
		{
			printf("Palce%d",a); 
			while(path[i][j]!=0)/* 把i到j的路径上所有经过的景点按顺序打印出来  */
			{ 
				printf("->Palce%d",path[i][j]); 
				if(i<j) 
				j=path[i][j]; 
				else 
				i=path[j][i]; 
			} 
			printf("->Palce%d",b); 
			printf("\n"); 
			printf("(Palce%d->Palce%d)最短距离是:%5d米",a,b,shortest[a][b]); 
		} 
	} 
	else printf("Error!There is no way!"); 
	printf("\n\n\n\n"); 
	return 1; 
} /*display*/ 


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]=36; cost[2][1]=36; 
		cost[1][5]=36; cost[5][1]=36; 
		cost[2][3]=24; cost[3][2]=24; 
		cost[2][4]=12; cost[4][2]=12; 
		cost[3][10]=19; cost[10][3]=19; 
		cost[4][5]=12; cost[5][4]=12; 
		cost[5][9]=34; cost[9][5]=34; 
		cost[6][7]=24; cost[7][6]=24; 
		cost[6][8]=25; cost[8][6]=25; 
		cost[6][10]=20; cost[10][6]=20; 
		cost[6][3]=17; cost[3][6]=17; 
		cost[7][9]=32; cost[9][7]=32; 
		cost[8][7]=28; cost[7][8]=28; 
		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.景点信息查询………请按s键\n"); 
        printf("2.景点最短路径查询…请按b键\n"); 
        printf("3.退出系统……………请按e键\n"); 
        printf("校园平面图如下:\n"); 
        printf(" 5------9-----7----8 \n"); 
        printf(" | \\ | / \n"); 
        printf(" | 4 | / \n"); 
        printf(" | \\ | / \n"); 
        printf(" 1-----2---3--6 \n"); 
        printf(" | / \n"); 
        printf(" | / \n"); 
        printf(" 10 \n\n"); 
        printf("请选择服务:");scanf("\n%c",&k); 
        switch(k) 
        {
            case 's':printf("进入景点信息查询:\n");introduce();break; 
            case 'b': printf("进入最短路径查询:\n");shortestdistance();break; 
            case 'e':exit(0); 
            default:printf("Error Input\n请输入字母s或b或e.\n\n");break; 
        }
    }
} 

⌨️ 快捷键说明

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