数据结构课程设计报告_最短路径C++

  • 格式:doc
  • 大小:151.50 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

青岛理工大学琴岛学院

设计报告

课题名称:求解最优交通路径

学院:计算机工程系

专业班级:计算机科学与技术

学号:#######

学生:**

指导教师:**

青岛理工大学琴岛学院教务处

2011 年 7 月 7日

图1

B.具体功能实现及相应的弗洛伊德算法

首先,建立查询信息对话框,使用户能够录入需要查询的城市代号,并显示路径长度及最短路径沿途经过的城市。并相应地添加如下变量int m_v0;int m_v1;int m_lj;CString m_zd;

具体代码如下:

#define MAXV 25 //最大顶点个数

#define INF 32767 //用32767表示∞

//以下定义邻接矩阵类型

typedef struct

{ int no; //顶点编号

char name[10]; //顶点名称

} VertexType; //顶点类型

typedef struct //图的定义

{ int edges[MAXV][MAXV]; //邻接矩阵

int vexnum,arcnum; //顶点数,弧数

VertexType vexs[MAXV]; //存放顶点信息

} MGraph; //图的邻接矩阵类型

1.通过函数CreatUDN()存放城市路径信息,输入顶点之间的路径长度,创建带权图的邻接矩阵。

void CTDialog::CreatUDN()

{

MGraph *g=(MGraph*)malloc(sizeof(MGraph));

int i,j;

for(i=0;i

for(j=0;j

{

g->edges[i][j]=INF;

if(i==j)g->edges[i][j]=0; //初始化置任意两城市之间距离为无穷大,即两城市之间没有直接通路

{

if(i!=j)

m_zd="没有路径";

}

else if(x==i&&y==j)

{

m_lj=A[i][j];

CString zfc;

zfc.Format("%d",i); //输出路径上的起点

m_zd+=zfc;

ppath(path,i,j); //输出路径上的中间点

zfc.Format("-->%d",j); //输出路径上的终点

m_zd+=zfc;

}

}

}

4.输出最短路径函数,递归输出从顶点i到j的最短路径中依次经过的顶点,直到path[i][j]=-1,即没有中间顶点为止。

void CTDialog::ppath(int path[][MAXV], int i, int j)

{

int k;

k=path[i][j];

if (k==-1) return;

ppath(path,i,k);

CString zfc;

zfc.Format("-->%d",k);

m_zd+=zfc;

ppath(path,k,j);

}

四.调试分析(调试过程中出现的问题及处理方式)

A.调试出现的界面

1)进入程序弹出查询信息对话框如图2:

图2

2)输入查询信息,显示路径长度及最短路径,如果输入代号不在0~24之内,提示出错。如图3、图4:

图3 图4

3)查询成功后,可修改城市代号反复查询。

B.出现的问题及解决方式

1)提出问题:地图导入后,起初无法导入正常导入到VC++6.0,而6.0以上的版本可以,后来导入经过调试无法在界面上显示。

分析问题:VC++6.0版本较低,无法支持分辨率较高的图形。图形无法显示的问题,可能是图形并没有与界面联系起来。

解决方法:在将地图导入之前,将地图的保存为分辨率较低的bmp位图,即可导入到VC++6.0。界面无法显示,是没有将位图画刷选入。添加相关函数pDC->BitBlt(nX, nY, bmpInfo.bmWidth,bmpInfo.bmHeight,&dcMemory,0,0,SRCCOPY)即可显示。

2)提出问题:将C语言代码添加到相关函数中,系统无法识别无法编译。

分析问题:应该添加一些C++可以识别的C的相关信息,使之联系起来。

解决方法:包含进相关头文件,即添加#include 、#include。3)提出问题:一开始将主要代码添加到View类中,在对话框接收到参数通过(WPARAM wParam,LPARAM lParam)实现参数的传递,同时却需要在View类中接收和初始化的一些列问题,增加了不必要的麻烦。

分析问题:可以通过其他方式,减少参数传递过程。

解决方法:直接在对话框添加的类TDialog中,添加代码,省去了参数传递的麻烦。

4)提出问题:将课本上的弗洛伊德算法的相关代码添加后,与实际情况不符,课本上的路径都是全部两点之间的,而现实的交通图中是从用户输入的起始点到目的点。

分析问题:在参数传递时传递接收的起始点和目的点,然后只判断这两个点就可以了。

解决方法:修改判断语句,增加可通过的情况,if(x==i&&y==j&&A[i][j]==INF)和if(x==i&&y==j)添加双向的情况。

5)出现问题:将查询后的路径长度和最短路径在地图界面上显示。通过pDC->Textout()显示。而输出过程中,需要各个函数的递归实现,通过参数传递,在View中输出,显得不太现实。在TDialog中输出,添加CDC *pDC后,依然无法显示。包含入相关头文件#include "最短路径View.h"依然无效。在相关函数中添加代码CDC *pDC=GetDC();也没有得到想要的显示。

分析问题:在现有知识和自己所能查到资料中,这种方法不便实现,即使实现后,只能查一次,反复查找需要刷新屏幕。工作量大。

解决方法:在查询对话框中添加路径长度和最短路径的内容,直接在对话框中显示,即可反复查找,又省去了pDC不能使用的麻烦。

6)出现问题:运行程序后,无法弹出对话框。弹出对话框后,在查询最短路径时,第一次查询正常,而之后的查询最短路径在之前的基础上不断添加。

分析问题:对话框不显示,应该是缺少相关的命令。而路径出错,应该增加对应的语句使每次查询,显示路径的对话框能过刷新一次。