数据结构课程设计报告_最短路径C++
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 分析问题:可以通过其他方式,减少参数传递过程。 解决方法:直接在对话框添加的类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)出现问题:运行程序后,无法弹出对话框。弹出对话框后,在查询最短路径时,第一次查询正常,而之后的查询最短路径在之前的基础上不断添加。 分析问题:对话框不显示,应该是缺少相关的命令。而路径出错,应该增加对应的语句使每次查询,显示路径的对话框能过刷新一次。