课程设计报告

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


#include <iostream>  
#include <string>  
using namespace std;  
const Num = 9;         //9个场所
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, 600, 350, Max, Max, Max, 200, Max, Max },
		{ 500, Max, Max, Max, Max, Max, Max, Max, Max },
		{ Max, Max, Max, 500, Max, Max, Max, Max, Max },
		{ Max, Max, 500, Max, 500, Max, Max, Max, Max },
		{ Max, Max, Max, 500, Max, 50,  700, Max, 150 },
		{ 400, Max, Max, Max, 50,  Max, Max, Max, Max },
		{ 200, Max, Max, Max, 200, Max, Max, 150, Max },
		{ 440, Max, Max, Max, Max, Max, 150, Max, 900 },
		{ Max, Max, Max, Max, 250, Max, Max, Max, Max }
	};
    string ch[] = {"第三饭堂","第四饭堂","医院","篮球场","体育馆","图书馆","钟海楼","主楼","商业中心"};  
    MGraph m(ch, 20, a);  
    m.Floyd();  
    m.print();  
    return 0;  
}  


收获和体会:

      数据结构课已经上完了,但是,学无止境。虽然,我暂时无法成为老师那能带给他惊喜(图形化编程)的人,但是我没有放弃,现在开始学习一个软件也是图形化编程的,但与MFC不同,它叫Qt。我觉得,Qt比MFC更好,虽然我没有学过MFC,但是我见过MFC的代码,而且百度了一下,发现Qt果然在很多方面都比MFC好,具体的等我学完才能说得专业点。总之,继续奋斗!!!!!!!!!!!!!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值