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

📄 dyxt.h

📁 这是一个数据结构课程设计——关于校园导游系统的源代码
💻 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 view()  //景点
{	printf("\n\n");
	printf("  ------***欢迎使用湖北师范学院导游咨询系统!***-------\n\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("湖北师范学院的路径图:\n");   
	printf("                                    600        500                  \n");
	printf("       科教大厦*2       问山居*8 --------*9--------*10文外学院     \n");
	printf("              /   \\         /    \\ 600  青山湖                    \n");
	printf("             /     \\       /      \\                               \n");
    printf("        200 /       \\500  / 150    \\ 400                          \n");
    printf("           /         \\   /          \\                             \n");
    printf("          /           \\ /     500    \\                            \n");
	printf("湖师大门 1*    综合楼 *4-------------*7 学生宿舍                    \n");
	printf("          \\     100  / |              |                            \n");
	printf("           \\        /  |              |                            \n");
	printf("         300\\      /300|              |                            \n");
	printf("             \\    /    |200           |300                         \n");
	printf("        图书馆 *3      |              |                             \n");
    printf("                       |      400     |                             \n");
    printf("                体育馆 *5-------------*6 运动场                     \n");
    printf("                                                                    \n");
}

void introduce()    /*景点介绍*/
{
	int a;
	printf("请输入查询景点编号:");
	scanf("%d",&a);
	getchar();
	printf("\n");
	switch(a)
	{
	case 1:
		printf("1:学校大门\n\n  湖北师范学院正门,左右科教大厦和信息大厦相对而立,气势恢宏。\n\n");break;
	case 2:
		printf("2:科教大厦\n\n   学校领导的办公大楼,同时也是主要教学楼之一。\n\n");break;
	case 3:
		printf("3:图书馆\n\n    书籍的海洋,知识的乐园。\n\n");break;
	case 4:
		printf("4:综合楼\n\n    学生上课、实验的主要场所。\n\n");break;
	case 5:
		printf("5:体育馆\n\n    体育学院场馆。\n\n");break;
	case 6:
		printf("6:运动场\n\n    学生运动的乐园,设有田径场、足球场。\n\n");break;
	case 7:
		printf("7:学生宿舍\n\n  学校宿舍。\n\n");break;
	case 8:
		printf("8:问山居\n\n  我校三大食堂之一。\n\n");break;
	case 9:
		printf("9:青山湖\n\n    学校内的青山湖,风景优美。  \n\n");break;
	case 10:
		printf("10:文外学院\n\n  文学院与外国语学院的主要教学楼。\n\n");break;
	default:
		printf("景点编号输入错误!请输入1->10的数字编号!\n\n"); break;
	}
}

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;
}

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]))
					{
						/*得到新的最短路径长度数值*/
						shortest[i][j]=shortest[i][k]+shortest[k][j];
						path[i][j]=k;
						path[j][i]=k;  /*用path[][]记录从i到j的最短路径上点j的前驱景点的序号*/
					}
}

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");

}

⌨️ 快捷键说明

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