数据结构集中实践 最短路径实验报告

实验二:校园导游咨询

 

二、实验内容

设计一个校园导游程序,为来访的客人提供各种信息查询服务

三、实验原理、方法和手段

试构造出问题模型,并编程实现这一问题的求解。根据实验内容编程,上机调试、得出正确的运行程序;编译运行程序,观察运行情况和输出结果。

校园的道路是双向通行的,可设校园平面图是一个无向网。顶点和边均含有相关信息。提供图中任意景点问路查询,即求任意两个景点之间的最短路径。

六、实验步骤

1. 设计你所在学校的校园平面图,所含景点不少于10个。以图中顶点表示校园内各景

点,存放景点名称、代号、简介等信息:以边表示路径,存放路径长度等相关信息;

2. 为来访客人提供图中任意景点相关信息的查询;

3. 为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的

简单路径。 

七、实验报告

记录数据结构与算法设计的过程及实验步骤、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。格式见实验报告模板。测试数据及测试结果请在上交的资料中写明。

#include
#include
#include
#define MAXV 50
#define INF 32767
typedef int SpotsNum;

typedef char InfoType;

typedef struct{	
	int number;						//编号
	InfoType sight[50],description[500];		//景区名称,描述 
} VertexType;	
			
typedef struct{	
	int edges[MAXV][MAXV];		//路
	int n,e;					//顶点数,边数
	VertexType vex[MAXV];		//景点信息
} MatGraph;	

MatGraph map;//地图 
int A[MAXV][MAXV];//邻接矩阵 
int path[MAXV][MAXV];//路径长度 

void init()
{
	map.e=32;map.n=15;
	
	for(int i=0;imap.n)
			printf("  输入错误\n");
		else
			printf("\t\t%d、%s:%s\n",map.vex[op].number,map.vex[op].sight,map.vex[op].description);
		printf("\n\t请输入您要查询的景点编号(输入-1表示返回上一层):");
	}
}

void Dispath(int temp)
{	
	printf("\n\t输入您现在的位置和将要去的位置编码(输入-1 -1表示返回上一层):");
	int i,j;
	while(scanf("%d%d",&i,&j),i!=-1,j!=-1) 
	{	
		int k,s;
		int apath[MAXV],d;		//存放一条最短路径中间顶点(反向)及其顶点个数	
		if(A[i][j]!=INF && i!=j)			//若顶点i和j之间存在路径
		{	
			if(temp==1) 
				printf("\t\t从%s到%s的路径为:",map.vex[i].sight,map.vex[j].sight);
			k=path[i][j];
			d=0; 
			apath[d]=j;				//路径上添加终点
			while(k!=-1 && k!=i)	//路径上添加中间点
			{	
				d++; 
				apath[d]=k;
				k=path[i][k];
			}
			d++; 
			apath[d]=i;				//路径上添加起点	
			if(temp==1)
			{
				printf("%s",map.vex[apath[d]].sight);//输出起点
				for(s=d-1;s>=0;s--)			//输出路径上的中间顶点
					printf("->%s",map.vex[apath[s]].sight);
				printf("\n\n\n");
			}
			else
				printf("\t\t路径长度为:%d\n\n\n",A[i][j]);
		}
		printf("\t输入您现在的位置和将要去的位置编码(输入-1 -1表示返回上一层):");
	} 
}

void Floyd()					//Floyd算法
{	
	int i,j,k;
	for(i=0;iA[i][k]+A[k][j])
				{	
					A[i][j]=A[i][k]+A[k][j];	//修改最短路径长度
					path[i][j]=path[k][j];		//修改最短路径
				}
}

void Menu()//操作菜单 
{
	int op;
	do{
		printf("\n\n\n1:浏览河南财经政法大学校园全景\n");
		printf("2:查看河南财经政法大学景点信息\n");
		printf("3:查询河南财经政法大学两景点之间的最短路径\n");
		printf("4:查询河南财经政法大学两景点之间的最短距离\n");
		printf("5:退出系统\n");
        printf("请输入您的选择:");
        scanf("%d",&op);
        switch(op)
		{
			case 1:
				Qallspots();//浏览全景 
				break;
			case 2:
			    Qspots();//查看景点信息 
			    break;
			case 3:
			    Dispath(1);	//输出两景点之间的最短路径
			    break;
			case 4:
			    Dispath(2);//两景点最短距离 
			    break;
			case 5:goto end;  //退出系统 
			default	:printf("输入错误\n");break;
		}
    }while(1);
    end:;
}
int main()
{
	init();
	Floyd();
	Menu();
}

 

你可能感兴趣的:(数据结构集中实践 最短路径实验报告)