数据结构课程设计计计

来源:互联网 发布:淘宝韩妆小样真假 编辑:程序博客网 时间:2024/04/27 08:32

 

 

 

 


《数据结构课程设计》


课程题目

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 0