课程设计程序报告

一、实训目的

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

二、实训环境

计算机windows xp或其它版本,VC6.0或更高版本,或其它语言环境。

三、实习题目

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

1、平面图


2、实现代码

#include <iostream>    
#include <string>    
using namespace std;    
const Num = 8;         //8个场所  
const Max = 10000;     //初始化边,请将不到达边初始值为最大值,这里使用10000  
class MGraph    
{    
public:    
    MGraph(string a[], int e, int b[][Num]);    
    void Floyd();    
    void print();    
private:    
    string vertex[Num];    
    int arc[Num][Num];    
    int vertexNum, arcNum;    
    int dist[Num][Num];    
    string path[Num][Num];    
};    
  
MGraph:: MGraph(string a[], int e, int b[][Num])    
{     
    int i,j;    
    vertexNum = Num;    
    arcNum = e;   
    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] = b[i][j];  
}  
    
void MGraph::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++)                      //判定顶点i j之间是否经过k  
        for(i = 0; i < vertexNum; i++)    
            for(j = 0; j < vertexNum; j++)    
            {  
                if(i == j) continue;   
                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()      //结点m到n的最短路径    
{    
    int a,b,i;  
    char ch;  
    bool N = 1;  
    while(N)  
    {  
       cout << "你想找哪两个地方的最短路径?请输入这两个地方的名称" << endl;    
       string ch1, ch2, ch11, ch22;    
       cin >> ch11 >> ch22;            //请输入你的起点和终点。  
       bool P1 = 1, P2 = 1;  
       while(P1 == 1 || P2 == 1)       //异常处理,预防至少有一个场所名称不存在情况  
       {  
           for(i = 0; i < Num; i++)  
               if(vertex[i] == ch22) { ch2 = ch22; P2 = 0; }  
           for(i = 0; i < Num; i++)  
               if(vertex[i] == ch11) { ch1 = ch11; P1 = 0; }  
           if(P1 == 1 || P2 == 1)   
           {  
               cout << "输入有误!至少有一个地方的名称是不存在的,请重新输入两个地方的名称" << endl;  
               cin >> ch11 >> ch22;  
               P1 = P2 = 1;  
           }  
  
       }            
       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 << "的最短路径为:\n"   
            << path[a][b] << "\n长度为" << dist[a][b] << endl;    
       N = 0;  
       cout << "是否想继续了解?(Y或y为继续,N或n为停止)" << endl;  
       cin >> ch;  
       while(ch != 'Y' && ch != 'y' && ch != 'N' && ch != 'n')  
       {  
           cout << "请重新输入!" << endl;  
           cin >> ch;  
       }  
       if(ch == 'Y' || ch == 'y')  
           N = 1;  
    }  
}    
       
int main()    
{    
    int a[Num][Num] =   
    {  
        { Max, 100, Max, Max, Max,1000, Max, Max,  },  
        { 100, Max, 70 , 60 , 200, Max, Max, Max,  },  
        { Max, 170, Max, 50 , Max, Max, Max, Max,  },  
        { Max, 60 , Max, Max, Max, Max, Max, Max,  },  
        { Max, 250, Max, 400, Max, 300, Max, 600,  },  
        { Max, Max, Max, Max, 298, Max,  20, 300,  },  
        { Max, Max, Max, Max, Max,  30, Max, Max,  },  
        { Max, Max, Max, 700, 670, 302, Max, Max,  },  
          
    };  
    string ch[] = {"校门口","主楼","体育馆","图书馆","钟海楼","第三饭堂","西湖","医院"};    
    MGraph m(ch, 20, a);    
    m.Floyd();    
    m.print();    
    return 0;    
}  

  

四、心得

   接触数据结构一个学期,虽然仅有一个学期,但是让我学到的比之前的更多,至少能有做到了解,知道了为什么和怎么做。尽管很多东西对于我还不是十分会用,但是这只是时间的问题,只要肯花时间去敲代码,去请问同学朋友老师,问题总会有解决的一天。这门课程的结束,也是另一个角度的开始,有遇到什么不懂的,我还是会幼稚的问下去,因为我不怕死!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值