数据结构课程设计计计

 

 

 

 


《数据结构课程设计》


课程题目

Floyd算法求最佳路径

课程编号

                                                     j1620102

学生姓名

                                                     易玉环

所在专业

信息管理与信息系统

所在班级

                                                  信管1133班

任课老师

易学明

实习时间

   2015年1月1日—1月11日

  



 一、课程设计目的

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

二、实习环境

计算机windows 7,开发软件VC6.0,C++语言环境。

三、  课程设计题目

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

四、总体要求和说明

使用数据结构相关知识来做。这里,我主要采用Floyd算法相关的知识来求最佳距离,完成本系统。

1、独立完成,设计算法并编写代码,调试通过。

2、写设计说明书。

内容:题目、功能、要求、分析、代码,收获和体会及不足等。

3、以个人独立完成。每一个选择一个题目。选题方式是:自己学号整除5所得的余数是几就做几号题。如学号为12做2号题,学号为5的做0号题。

五、需求分析

从实习题目和要求来看,本次的课程设计其依据的主要相关知识是Floyd算法相关的知识,函数模版等以及一些基础的C++编程语言知识。

六、代码如下:

#include <iostream>    
#include <string>     // 字符串头文件
#include<iomanip>      //引入输入输出格式头文件  
#include<windows.h> 
using namespace std;    
const int Maxsize = 100;    
  
class MGraph    
{    
public:    
    MGraph(char a[],int H[6][6]);    
   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(char a[],int H[6][6])    
{   int i,j;    
    vertexNum = 6;    
    arcNum = 6;    
    for(i=0;i<vertexNum;i++)    
        vertex[i]=a[i];  

    for(i=0;i<vertexNum;i++)        //使用邻接矩阵来存储,用数组l初始化,将不到达边初始值为最大值,这里使用10000
        for(j=0;j<vertexNum;j++)    
            arc[i][j]=H[i][j];    
 }    


void MGraph::Floyd()                //使用floyd算法,求两点之间最短路径  
{   int i,j,k;    
    for(i=0;i<vertexNum;i++)        //初始化矩阵dist和path            
        for(j=0;j<vertexNum;j++)    
        {    dist[i][j] = arc[i][j];   
             if(dist[i][j] != 10000)   
                 path[i][j]=vertex[i]+vertex[j];    
             else path[i][j] =" ";    
        }    
    for(k=0;k<vertexNum;k++)                     //进行n次迭代 
        for(i=0;i<vertexNum;i++)                  //判定顶点i和顶点j之间是否经过顶点k 
            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 a,b,i;
    cout<<"您想了解哪两个点的最佳路径?(注:只能输入所给小写字母 如:a c)"<<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]<<endl;
cout<<"长度为"<<dist[a][b]<<endl;    
    system("pause");  
}    
  
int main()    
{      
   
char ch[]={'a','b','c','d','e','f'};    //顶点信息,用于初始化顶点数组
    
int H[6][6]={
{10000,200,400,10000,10000,10000},
{200,10000,100,100,10000,200},
{400,100,10000,10000,250,10000},
{10000,100,10000,10000,100,150},
{10000,10000,250,100,10000,300},
{10000,200,10000,150,300,10000}};  //路径长度,用于初始化arc数组
        cout <<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
cout <<"┃ →→→→niki   ><(((:>                 欢迎使用               <:)))>< niki  ←←←← ┃"<<endl;
cout <<"┃                        参考:易老师博客以及书本相关知识                                 ┃"<<endl;
cout <<"┃                                                                                                                     ┃"<<endl;
cout <<"┃◇◇◇◇◇                          Flord 算法求校园两点的最佳路径             ◇◇◇◇◇┃"<<endl;
cout <<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;
Sleep(3000);
        cout <<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;
cout <<"┃  a—校门口┃ b—主教学楼┃ c—体育馆 ┃d—钟海楼 ┃e—科技楼 ┃f—医 院      ┃"<<endl;
        cout <<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;
    MGraph m(ch,H);    
    m.Floyd();    
    m.print();    
    return 0;    
}    


七、收获和体会及不足:

 时光匆匆而过,一个学期转瞬即逝。在过去的这一学期时间里面,原本以为会比较轻松的设计任务却让我觉得有点措手不及。虽然困难重重,但是在遇到的各种各样的问题中,我还是很积极地去问身边的同学,去参考各种辅助书,到网上学习终于完成了这个课程设计。

经过一个学期的数据结构的学习,在易学明老师的指引下,我们对数据结构的认识增多了不少。可能是自己一直以来都在拿自己是个文科生来做借口吧。再加上自己大部分的知识都没能很好的掌握好。课程设计,不仅让我们的知识更加牢固,还让我意识到我们所学的知识可以与生活紧密的联系起来。这让我对自己有了更多的信心,因为我们在大学里面不是混日子,而是在学习真正对我们的生活有帮助的知识和能力。

一方面,由于自己的能力有限,这课程设计做得很简略,但是正是这一个小小的课程设计,却让我有了大大的希望。我会更加珍惜现在这么好的学习环境,努力学习知识,让自己在激烈的社会竞争中立足,也把自己所学的知识运用到生活实际中来回报社会。本人真心感谢老师和同学们对我的无私的帮助,同时也希望老师和同学能批评我的错误。我会虚心,有则改之,无则加勉!学如逆水行舟不进则退。我会加油!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值