数据结构课程设计报告最小生成树Kruskal算法


    
    计算机科学技术系


    课程设计报告
    20142015学年第二学期




    课程
    数结构
    课程设计名称
    Kruskal算法求生成树
    学生姓名

    学号

    专业班级
    软件工程
    指导教师


    2014年X月
    题目:设计程序完成功:定网起点kruskal算法基思想求解生成树
    1问题分析务定义
    根课设题目求拟整体程序分三模块三模块体分析:
    确定图存储形式通题目求具体分析发现该题操作路径输出采边集数组(元素结构体包括起点终点权值)邻接矩阵较方便编程
    Kruskal算法该算法设置集合A该集合直某生成树子集步决定否边(uv)添加集合A中添加条件A∪{(uv)}然生成树子集称样边A安全边安全添加A中会破坏述条件
    2 数结构选择概设计
    存储结构
    定义结构体数组空间足够输入字符串存数组中
    struct edges
    {int bv
    int tv
    int w
    }
    概设计
    算法思想 :
    算法会先权重非递减序图中边进行排序然空子图开始扫描序表试图列表中条边加前子图中然种添加应导致回路果产生回路条边跳图顶点包含构造树中算法停止
    算法基思路:

    K r u s k a l算法次选择n 1条边贪婪准:剩边中选择条会产生环路具耗费边加入已选择边集合中注意选取边产生环路形成棵生成树K r u s k a l算法分e 步中e 网络中边数目耗费递增序考虑e 条边次考虑条边考虑某条边时加入已选边集合中会出现环路抛弃否选入
    假设点标号(djpj)中d起源点点j短路径长度(顶点身短路径零路(没弧路)长度等零)pjsj短路径中j点前点求解起源点s点j短路径算法基程:
    1) 初始化起源点设置:①ds0ps空②点:di∞pi?③标记起源点s记ks点设未标记
    2) k直接连接未标记点j距离设置:
    djmin[dj dk+lkj]
    式中lkj点kj直接连接距离
    3) 选取点未标记结点中选取dj中i:
    dimin[dj 未标记点j]
    点i选短路径中点设已标记
    4)找点i前点已标记点中找直接连接i点j*作前点设置: ij*
    5)标记点i果点已标记算法完全推出否记ki转2)继续
    程序中求两点间短路径算法步骤:
    ① 调dijkstra算法
    ② path中第终点元素回溯起点显示出
    3详细设计编码
    功模块图
    开始
    输入顶点数n
    输入边数e
    输入边集
    显示菜单进行选择
    求两点间短距离
    求两点间短距离
    Kruskal算法
    结束

    图31 功模块图
    流程图分析
    1 函数
    开始
    输入顶点数n
    输入边数e
    输入选项a
    a1
    调insertsortkruskal函数
    a2
    输入v0
    调dijkstraprintpath1函数
    a3
    输入v0v1
    调dijkstraprintpath2函数
    输入a4
    结束

    图32函数流程图
    2 insertsort函数
    开始
    int ij
    for(i2ige[i]wge[0]ge[i]
    ji1
    ge[0]w ge[j+1]ge[j]
    j
    Y
    ge[j+1]ge[0]
    N
    Y
    结束
    N

    图33insertsort函数流程图
    3.Kruskal函数
    开始
    int set[MAXE]v1v2ij
    for(i1i set[i]0
    i1
    j1
    jv1v2
    v1seeks(setge[j]bv)
    v2seeks(setge[j]tv)
    printf((dd)d\nge[j]bvge[j]tvge[j]w)
    set[v1]v2
    i++
    j++
    Y
    Y
    结束
    N
    N


    图34 Kruskal函数流程图
    4 机调试程
    调试程
    调试程序时遇类问题:
    1 时函数中数组中数法存储
    2 进行检验发现没申请空间
    3 源程序开头#define定义数值数组时知道空间
    4 函数中时出现负值
    5 进行检验发现程序中∞32767代cost[u][w]32767cost[u][w]+dist[u]肯定溢出负值造成权值出现负值
    6 cost[u][w]32767dist[w]肯定需重新置数if(s[w]0&&cost[u][w]+dist[u]程序执行程
    系统说明:
    1 输入数整数字符串(123)
    2 系统建立带权图够Kruskal算法求改图生成树够选择图意点做根结点够求两点间短距离
    3 该系统会菜单提示进行选项:
    1kruskal
    4exit
    5测试结果分析
    结果截图

    图51 输入形式

    图52 kruskal算法输出

    图53kruskal算法输出
    算法描述
    1 Kruskal函数:
    Kruskal需序边集数组先边集数组排序次执行中需判断否构成回路需判断函数seeksKruskal中调seeks
    2 dijkstra函数:
    源余点短路径n1条设变量vnum作计数器控制循环该函数关键dist数组重新置数该置数条件:该顶点访问新起点该点权值加新起点源点权值该点原权值第次设:if(s[w]0&&cost[u][w]+dist[u]6户说明
    1 开创天中文c++软件
    2 写代码<附录部分>导入软件中运行
    3 述说明运行检查程序
    7参考文献
    [1]王昆仑李红数结构算法北京:中国铁道出版社2006年5月
    [2]严蔚敏 吴伟民 数结构(C语言版)清华学出版社2007
    [3]张德富 算法设计分析国防工业出版社2009
    [4]朱青 计算机算法程序设计清华学出版社2009
    [5]徐宝文李志 C程序设计语言机械工业出版社2004
    8附 录(关键部分程序清单)
    程序代码
    #includestdioh
    #define MAXE 100
    struct edges
    {int bv 起点
    int tv 终点
    int w权值
    }
    typedef struct edges edgeset

    int seeks(int set[]int v) 顶点集顶点v
    {
    int i
    iv
    while(set[i]>0)
    iset[i]
    return i
    }

    void kruskal(edgeset ge[]int nint e) 边集顶点数n边数e
    {

    int set[MAXE]v1v2ijxy1 输入顶点集
    edgeset xy[MAXE]
    for(i1iset[i]0
    i1
    j1
    printf(第d生成树\n1)判断第生成树

    while(j{
    v1seeks(setge[j]bv) 起点
    v2seeks(setge[j]tv) 终点
    if(v1v2)
    {
    xy[j]ge[j]
    printf((dd)d\nge[j]bvge[j]tvge[j]w)
    set[v1]v2
    i++ 计数器(判断顶点数否溢出)
    }
    j++
    }
    y++

    while(ge[j1]wge[j]w){ 输出生成树
    printf(第d生成树\ny)
    for(x1x printf((dd)d\nxy[x]bvxy[x]tvxy[x]w)
    }
    printf((dd)d\nge[j]bvge[j]tvge[j]w)
    j++
    y++
    }


    }

    void insertsort(edgeset ge[]int e) 权值进行排序
    {
    int ij
    for(i2iif(ge[i]w{
    ge[0]ge[i]
    ji1
    while(ge[0]w{
    ge[j+1]ge[j]
    j
    }
    ge[j+1]ge[0]
    }
    }
    main()
    {
    edgeset ge[MAXE]
    int anei
    printf(请输入顶点数)
    scanf(d&n)
    printf(请输入边条数)
    scanf(d&e)
    printf(请输入边信息(起点终点权值)\n)
    for(i1iscanf(ddd&ge[i]bv&ge[i]tv&ge[i]w)
    printf(列菜单中进行选择:\n)
    printf(1kruskal算法((起点终点)权值):\n)

    printf(2exit(退出):\n)
    scanf(d&a)
    while(a2)
    {
    switch(a)
    {
    case 1insertsort(gee)
    kruskal(gene)
    break

    }
    printf(列菜单中进行选择:\n)
    printf(1kruskal算法((起点终点)权值):\n)

    printf(2exit(退出):\n)
    scanf(d&a)
    }
    return 1
    }
    合肥学院
    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 2 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    数据结构和算法课程设计题目

    XX大学课程设计课程名称: 数 据 结 构 与 算 法院(部)名 称: 信息与计算科学学院组长姓名学号 同组人员姓名指导教师姓名: 设 计 时 间: 2010.6.7-...

    11个月前   
    380    0

    最小生成树算法过程详解(信息系统项目管理师考试)

    最小生成树算法过程详解针对最小生成树算法这一知识点,相当一部分课本和相关参考书对算法过程讲解并不是特别详尽。本文主要针对信息系统项目管理师考试,对最小生成树算法过程进行逐步解析,以更加促进对知...

    2年前   
    285    0

    哈夫曼树应用数据结构课程设计报告

    数据结构课程设计报告设计题目:哈夫曼树应用 专 业 : 软件工程 班 级 : 软件 学 生 : ...

    2年前   
    468    0

    算法与数据结构的商品货架管理课程设计报告(还有程序源代码)

    课程设计课 程: 算法与数据结构 题 目: 商品货架管理 专 业: 计算机类 班 级: ...

    1年前   
    322    0

    数据结构课程设计报告——图书管理系统

    课程设计报告 课设课题: 课程设计——图书管理系统 学 院: 电 子 信 息 学 院 专 业: 网 络 工 程 ...

    3年前   
    681    0

    车牌号管理系统数据结构课程设计报告

    XX 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 车牌号管理系统 ...

    3年前   
    429    0

    数据结构课程设计报告n维矩阵乘法

    设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,输出ab-1结果。

    4年前   
    710    0

    学生成绩管理系统设计课程设计

    学生成绩管理系统设计目 录引言 1 系统概述 ...

    1年前   
    338    0

    操作系统课程设计银行家算法报告

    《操作系统--银行家算法》课程设计报告姓 名: 学 号: 班 级:计科班 ...

    3年前   
    618    0

    合工大页面置换算法操作系统课程设计报告

    计算机与信息学院《操作系统综合设计》报告设计题目:页面置换算法学生姓名:学 号:专业班级:计算机科学与技术班2015 年 X月一、设计题目 3二、开发环境与工具 3三、设计原理 31....

    3年前   
    556    0

    《操作系统 银行家算法》课程设计报告

    《操作系统--银行家算法》课程设计报告姓 名: 学 号: 班 级: 计科班 ...

    3年前   
    810    0

    银行家算法《操作系统》课程设计报告

    《操作系统》课程设计报告课题: 银行家算法 专业计算机科学与技术学生姓名班级计算机学号指导教师信息工程...

    3年前   
    697    0

    数据结构实习报告

    数据结构实习报告  一、需求分析1、  程序所实现的功能;2、  程序的输入,包含输入的数据格式和说明;3、  程序的输出,程序输出的形式;4、  测试数据,如果程序输入的数据量比较大,需要给...

    8年前   
    1047    0

    线索二叉树算法的设计与实现

    随着时代的不断进步,计算机技术也随之得到发展。数据结构在计算机技术的发展中起到巨大的作用。数据结构为构建出高效的计算机算法打下了坚实的基础。良好的数据结构能够提高算法效率的同时也能减少对系统资源的占用[

    3年前   
    1002    0

    数据结构(C语言版)课程设计报告表达式求值说明书

    XX大学数据结构课程设计说明书题目: 表达式求值 院 系: 计算机科学与工程学院 专业班级: 计算机班 学...

    3年前   
    538    0

    数据结构课程设计报告多关键字排序高考排序

    XX工 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 多关键字排序 姓 ...

    6个月前   
    186    0

    设计散列表实现电话号码查找系统数据结构课程设计

    XX学院课程设计报告书专 业:计算机科学与技术 课程设计名称:《数据结构课程设计》题 目:设计散列表实现电话号码查找系统班 级: 学    号: 姓 ...

    2年前   
    579    0

    高校教材管理系统数据结构课程设计

    数据结构课程设计题 目: 高校教材管理系统 课 程 设 计 任 务 书一、课程设计题目: 高校教材管理系统...

    3年前   
    778    0

    数据结构文本编辑器课程设计

    数据结构课程设计报告一. 需求分析1.题目及要求名称:简单的文本编辑器内容:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行。要求:(1)...

    1年前   
    302    0

    关于数据结构课程设计心得体会范文

    关于数据结构课程设计心得体会范文   关于数据结构课程设计心得体会(1)   这学期开始两周时间是我们自己选题上机的时间, 这学期开始两周时间是我们自己选题上机的时间,虽然 上机时间只...

    5年前   
    1417    0

    文档贡献者

    文***品

    贡献于2023-04-07

    下载需要 2 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档