没有合适的资源?快使用搜索试试~ 我知道了~
数据结构Kruskal算法动态演示以及计算器可视化实现实验报告
需积分: 9 8 下载量 92 浏览量
2009-07-03
17:23:42
上传
评论
收藏 370KB DOC 举报
温馨提示
试读
48页
Kruskal算法的动态演示以及计算器的实现一直是一个比较经典的问题,这里晒出来分享下
资源推荐
资源详情
资源评论
计算机与信息学院
数据结构课程设计
实验报告
专 业 班 级
计算机
07—4
班
学生姓名及学号
王守涛 20072581
课 程 教 学 班 号
0002
任 课 教 师
胡学钢 张晶
实 验 指 导 教 师
张晶
实 验 地 点
新区四号实验楼四号机房
2008 ~2009 学年第 二 学期
题目 1:设计程序完成如下功能:对给定的图结构,用 Kruskal 算
法的基本思想求解图的最小生成树,并给出动态演示过程
题目 2:设计一个模拟计算器的程序,要求能包含加、减、乘、除、
括号运算符,以及 SQRT 和 ABS 对任意整型表达式进行求解。
要求:要检测运算执行的条件并给出错误警报
一、动态演示 Kruskal 算法
1、题目分析及建立模型
在图的算法中,求最小生成树有着十分重要的理论和现实意义,二
Kruskal 算法正是求解这一问题的经典算法。Kruskal 算法的主要
思想即是通过不断地寻求满足一定条件(即所选边不能构成环)的
最小权值的边,直至找出图的最小生成树为止。为了能够动态地演
示 Kruskal 算法求解最小生成树的过程,首先的问题是如何动态的
建立一个图,然后的问题才是怎样动态地演示 Kruskal 算法。所以
为了解决这个问题,我从这两个方面逐一入手进行求解,利用 MFC
的知识进行演示。
2、算法的设计与具体的设计思路
A、程序界面的设计
首先为了建立一个图,需要知道一个图的节点数,由于界面有限,
这里将节点数限制在 8 以内(包括 8),超出 8 个将会给出提示。
所以在程序界面中必须有图节点数目的输入,这里设计了一个编辑
框用于输入图的节点数目。另外,一个完整的图还必须有一定的边
信息,包括边的起始端点和权值,以便求解最小生成树。而这些信
息完全是由用户确定的,并且由用户输入的图的节点数确定。这里
在用于输入节点数的编辑框下设置两个列表框和一个编辑框分别用
于边的起始端点和权值的输入。另外,为了使节点数和边信息产生
关联,这里又设置了一个“应用”按钮,为了将边信息与图相关联,又
设置了一个“增加边”按钮,最后还有一个“动态演示 Kruskal 算法”
的操作按钮以及一个退出按钮。此外,在界面的右端设置一个图形
演示区,已进行动态演示。完整的程序界面如下:
B、按钮响应函数的设计
在上述界面中有三个主要按钮,分别是“应用”“增加边”以及“动态演
示 Kruskal 算法,下面分别设计其响应函数
“应用”按钮的主要作用是把图的节点数和边信息和图相关联。用
户在编辑框 m_vexnum 中输入结点,然后点击“应用”按钮后,在两
个列表框 m_Start 和 m_End 中自动添加 n 各结点,同时在演示区
中画出 n 个节点,如下所示:
为了关联相关信息,在 CsmileGraph1Dlg 中增加如下变量:
Graph graph; int vexnum;
在按钮的响应函数 OnApply()中完成如下功能,一是在初始化图
graph:
//初始化一个图
graph.graph_vexnum = 0;
for(int j = 0; j < 8; j++)
graph.data [j] = (char)('A'+j);
for(int i = 0; i < 8; i++)
for(int j = 0; j < 8; j++)
graph.AdjMatrix [i][j] = graph.AdjMatrix [j][i] =INF;
二是将编辑框中的内容与图和列表框关联起来同时在演示区中绘制
n 个节点,如下所示:
//输入图的节点数
CString s ;
m_vexnum.GetWindowText (s);
int v_num = (int)atoi(s);
//添加图的相关参数
graph.graph_vexnum = v_num;
for(int t = 0; t < graph.graph_vexnum ; t++)
graph.data [t] = (char)('A'+t);
if(v_num<=8&&v_num>0)
Draw(v_num);
else if(v_num<=0||v_num>8)
MessageBox("请输入 1 到 8 之间的一个数!!!!");
else
MessageBox("你还没有输入结点数!!");
m_Start.ResetContent();
m_End.ResetContent ();
for(int k = 0; k < v_num; k++)
{
剩余47页未读,继续阅读
资源评论
njuwst
- 粉丝: 9
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功