数据结构课程设计

一、实训目的:

通过课程设计,学会运用数据结构知识,针对具体应用,自己设计合理数据结构,确定存储结构,并能设计具体操作算法,选择使用具体语言进行实现。掌握C++较复杂程序的组织和设计过程,调试技巧。学习解决实际问题的能力。

二、实训环境:

计算机windows 8.0,VC6.0

三、实习题目:

GDOU是真是一个好地方,校园如一座大花园,美丽而宽广。校园有许多建筑如教学楼、饭堂、宿舍楼、图书馆、体育馆、运动场、商业街、医院等,还有一些著名的风景点。现请根据学校的平面图,找出一些重要的场所,画出学校的平面图(场所可以根据其重要性适当减少),根据实际画出不同点间的路径,并估算每两个场所间的路径长。请设计数据结构并编程,当给出一个出发点和要到达另外一个场所的信息时,请给出最佳路径,并输出路径相关信息。

四、功能:

  (1)能够清楚的明白的展示GDOU的任何一个具体地点

(2)根据展示的地点,任意输入两个地点后按Enter键即可输出某一地点到另一地点的最短路径以及两地间的距离。

五、总结与体会

  (1)这次课程设计设计的知识点主要是FOLYD算法以及图的存储。老实说刚开始做课程设计的时候不知道从何着手,因为自己对FOLYD算法掌握的还不够彻底,不知道要怎么和图的存储联系起来,所以这其中很大部门是借鉴老师在博客上的。

(2)通过这一次课程设计,我发现了我平时不注意的细节致使我犯了很多错,最终导致源代码出现许多错误,以致运行调试出现问题,虽然已经改了很多,但是因为存在太多除了语法错误意外的逻辑结构错误,导致程序运行不了。

(3)通过这一次课程设计,我吸取了一个教训:先构架一个整体框架,然后逐步完善,每写完一个函数就对此进行调试,尽快检查出错误,尽早的修改。否则把所有的源代码写出来再调试,一旦错误多,就很难进行修改。同时也能检查自己在该方面的欠缺,及时改正。

(4)课程设计让我发现了自己的不足,同时也在一定程度上巩固了某些知识点,明白了运用不同的知识点,将其经过设计、联系在一起就能实现某个功能,将书本的理论知识化作实践成果,让我更清楚地了解到学这一门课程的作用。虽然花费了自己很多的时间去完成这个因诸多错误而无法正常运行的代码,但是还是很开心,毕竟自己亲自去查资料,去向别人讨教、自主完成的结果,在这一过程中收获到的东西比结果更重要(能成功运行就求之不得了)。因为在这个过程里,我清楚的认识自己这一学期在《数据结构》里学到了多少,没有掌握哪些知识,还在写设计的过程中接触到了课本里没有的知识点,然后独自去解决问题。不过最重要的是,学会了如何巧妙运用已学的知识去编程以及编程的思维方式。

(5)通过这一次课程设计,我认为自己有了一个很大的收获,就是以前书中自己认为懂得的知识,原来自己运用起来存在诸多问题,让我明白以后自己在学类似科目时要注重实践,因为多重知识结合是需要一定的技巧,一定的方法的。也让我明白每个知识点并不是独立存在的,将多个知识结合也是一门很难的学问。


源代码:

#include <iostream>
#include<string>
using namespace std;

const int MaxSize=100;    
class MGraph        //用邻接矩阵存储广东海洋大学图
{
	public:
		MGraph(string a,int n,int e,int[14][14]);  //建立具有n个顶点e条边的图
        void Floyd();
		void print();
	private:
		string vertex[MaxSize];
		int arc[MaxSize][MaxSize];
		int vertexNum,arcNum;
		int dist[MaxSize][MaxSize];
		string path[MaxSize][MaxSize];
};
MGraph::MGraph(string a,int n,int e,int w[14][14])
{
	vertexNum=n;arcNum=e;
	int i,j,k;
    
	for(i=0;i<vertexNum;i++)
		vertex[i]=a[i];
	for(i=0;i<vertexNum;i++)     
       for(j=0;j<vertexNum;j++)
		   arc[i][j]=w[14][14];
    
	   	  
}
//*******************************************
void MGraph ::Floyd()
{
	int i,j;
	for (i=0;i<vertexNum;i++)
		for(j=0;j<vertexNum;j++)
		{
			dist[i][j]=arc[i][j];
			if(dist[i][j]!=0)path[i][j]=vertex[i]+vertex[j]; 
			else path[i][j]=" ";
		}
		int k;
		for(k=0;k<vertexNum;k++)      //顶点i和j之间是否经过顶点k
			for(i=0;i<vertexNum;i++)
				for(j=0;j<vertexNum;j++)
				
					if(dist[i][k]+dist[k][j]<dist[i][j])
					{
						dist[i][j]=dist[i][k]+dist[k][j];
						path[i][j]=path[i][k]+path[k][j];
					}
}
void MGraph::print()
{
	int i,a,b; 
	cout<<"请输入两个地点:"<<endl;    
    string ch1,ch2;    
    cin>>ch1>>ch2; 
	for(i=0;i<vertexNum;i++)
		if(vertex[i]==ch1)a=i;
		for(i=0;i<vertexNum;i++)
			if(vertex[i]==ch2)b=i;
cout<<ch1<<"到"<<ch2<<"的最短路径为:"<<path[a][b]<<"总长度为:"<<dist[a][b]<<endl;
}
int main()
{
	int  n=14, e=16;
	string ch;
	ch="校门口,水生博物馆,行政楼,体育馆,教工饭堂,主楼,第三饭堂,图书馆,校医院,中心广场,艺术楼,科技楼,实验楼, 工程训练中心";
	cout<<"校门口,水生博物馆,行政楼,体育馆,教工饭堂,主楼,第三饭堂,图书馆,校医院,中心广场,艺术楼,科技楼,实验楼, 工程训练中心"<<endl;
int w[14][14]={{0,150,100,500,0,0,0,0,0,0,0,0,0,0},{150,0,0,0,100,0,0,0,0,0,0,0,0,0},{100,0,0,0,0,200,0,0,0,0,0,0,0,0},
			{500,0,0,0,0,0,0,0,0,0,0,350,0,0},{ 0,100,0,0,0,0,300,0,0,0,0,0,0,0}, {0,0,200,0,0,0,0,150,0,0,0,0,0,0},
			{0,0,0,0,300,0,0,0,300,0,500,0,0,0},{0,0,0,0,0,150,0,0,0,50,0,0,0,0},{0,0,0,0,0,0,300,0,0,0,800,0,300,0},
		   {0,0,0,0,0,0,0,50,0,0,0,100,0,0},{0,0,0,0,0,0,500,0,800,0,0,0,0,0},{0,0,0,350,0,0,0,0,0,100,0,0,150,0},
			{0,0,0,0,0,0,0,0,300,0,0,150,0,400},{0,0,0,0,0,0,0,0,0,0,0,0,400,0}};
	MGraph s(ch,n,e,w);
	s.Floyd(); 
	s.print();
	return 0;
}

运行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值