zoukankan      html  css  js  c++  java
  • 图 作业

    1.本周学习总结(0--2分)

    1.思维导图

    2.谈谈你对图结构的认识及学习体会。

    本章学习: 图的存储结构  Prim算法和Kruscal算法  拓扑排序
    图中的顶点关系比树的更加复杂,不再是单纯的层次关系,而是平等的,点与点都可能连通,所以存储就需要模拟一个平面,在图的关系比较稀疏是用邻接表(使用线性存储),反之使用邻接矩阵,二维数据即可表示出一个平面。图的问题,主要是遍历和路径,难点在于找到相应算法(或者多种算法结合),解决一些实际问题时一般都会对算法进行相应的改动。
    图的遍历比较经常用的是深度优先遍历和广度优先遍历。图的深度优先遍历是从初始点v出发,以纵向的方式逐渐访问各个顶点,一旦找不到相邻的顶点就回退,需要递归的过程,广度遍历是类似层次遍历,利用队列来一一访问。
    接着就是学Prim算法和Kruscal算法了。Prim和Kruscal算法,Prim算法是多次寻找邻边的权重最小值,而Kruskal是需要先对权重排序后查找的,Kruskal在算法效率上是比Prim快的,因为Kruskal只需一次对权重的排序就能找到最小生成树,而Prim算法需要多次对邻边排序才能找到。两种算法的时间复杂度不同,Prim算法的时间复杂度为O(e^2),Kruskal算法的时间复杂度为O(e^3).
    拓扑排序是将一个有向无环图G的所有的顶点排成一个线性序列,使得有向图中的任意的顶点u 和 v 构成的弧,(u, v) 属于该图的边集,并且使得 u 始终是出现在 v 前面。并且只有有向无环图才可以进行拓扑排序。该算法的思想:一:找到有向无环图中没有前驱的节点(或者说是入度为0的节点)输入;二:然后从图中将此节点删除并且删除以该节点为尾的弧。
    

    2.PTA实验作业(6分)

    要求挑3道题目写设计思路、调试过程。设计思路用伪代码描述。题目选做要求:

    2.1.1设计思路(伪代码)

    2.1.题目1:图着色问题

    begin:
    输入顶点数与边数,颜色数进行建图
         输入待检查的颜色分配方案的个数n
        for( ;n;n--){
                for i=1 to 顶点数{
                 输入颜色的分配方案,统计所用颜色总数num
                  }
             若统计的颜色总数num!=题干的颜色数     
                  则把flag由0赋为1
          }
             将颜色按深度遍历排序储存在数组中
              for i=1 to 顶点数{
                    for j=1 to 顶点数{
                      若有相邻的颜色相同
                          则把flag的值由0赋为1
                   }
                 flag值已为1即已有相邻颜色相同停止循环
          }
       如果flag=1 输出no 否则 输出yes
    

    2.1.2代码截图



    2.1.3提交说明

    PTA提交列表中的每个错误详细说明为什么及如何解决。

    Q1.第一二次编译错误问题出在void Judge(MGraph g,int n,int sum)函数端口处的for循环中对i的初始化值
    Q2.最后稍作修改for循环参数初始化的数值完成编译
    A.get到函数端口问题对于程序的影响非常大,稍微的数值改动对程序都是非常关键的,所以算法的选择至关重要
    

    2.2 .1题目2同题目1

    begin:
    定义n,e
    if   e>=n-1
        for   k=0 to e
            输入顶点 权值
            权值存入邻接矩阵
        调用prim函数
    else //一定不连通
        输出-1
    定义数组lowcost
    for   i=1 to n
        lowcost赋初值
    for i=0 to n
        min=INF
        for j=1 to n
            if    lowcost[j] 且 lowcost[j]<=min
                min=lowcost[j];
            k=j;
         lowcost[k]=0
        if   min!=INF
            count+1
            cost+=min
        for    j=1 to n
            修正lowcost数组
    if         count==n-1
        输出cost
    else //不连通
        输出-1
    

    2.2.2代码截图





    2.2.3提交说明

    说明:
    Q1.部分正确的原因是函数调用中对j的初始化取值取值为0,导致部分答案不符合题目要求
    Q2.在void CreateMGraph(MGraph &g,int n,int e )函数中输入邻接矩阵时顺序弄错了
    A.做泽中题目事先画图比较实在
    

    2.3 .1题目3

    begin:
     judge函数传入邻接表G
        定义边结点指针p
        定义整型i,count,v,flag,count1
        定义整型数组t[10000]
        定义队列s
        for v=1 to v=G->n do  //遍历结点
            count=0,count1=1    //初始化
            将v结点入队
            t[v]=v   //为了不用对数组进行重置,所以令其为v
            flag=v    //flag存每一层最后一个结点
            while 队列不空 do
                p指向以队列第一个元素为头结点的第一个边结点
                while p不为NULL do
                    if t[p->adjvex]!=v then    //即p结点还没有被访问过
                        将p结点的值入队
                        t[p->adjvex]=v    //置为已访问
                        count1++     //记录访问结点总的个数
                    end if
                    p指向下一个边结点
                end while
                if 队头元素与flag相等 then
                    count++     //访问深度
                    flag等于队尾
                end if
                if count==6 then break
                队列出队一次
            end while
            输出百分比    //count1除于总结点个数
            队列清空
    

    2.3.2代码截图




    2.3.3提交说明

    Q1.对于编译错误的情况时因为void CreateAdj()函数的没有定义好参数变量,对i,j所对应要实现的作用没看清楚,导致函数混乱
    Q2.主函数中对函数的安排不够严谨
    A.六度空间是一道思维量很大的题目,代码虽然少,但是要实现的功能非常多
    ##3、上机考试错题及处理办法(-2--2分)
    
    ##3.1.截图错题代码
    错题:6-3 jmu-ds-拓扑排序 (20 分)  7-2 公路村村通 (30 分)
    ![](https://img2018.cnblogs.com/blog/1477754/201906/1477754-20190609171623497-1554376788.png)
    
    ![](https://img2018.cnblogs.com/blog/1477754/201906/1477754-20190609171916617-943313032.png)
    
    ##3.2 错的原因及处理方法
    错的原因? 我就是不会打啊,考试中只能用cout 的方法拿分虽然这是个测试答案的方法但是不影响我拿分
    怎么解决:拓扑排序我参考身上例题打了一遍代码,大概懂了什么意思,而另外一题的话是考试中时间不允许,只能靠方法拿分。。。。
    end
    文字说明代码中那里错,怎么解决
  • 相关阅读:
    json数据转化格式
    远程安装软件控制台
    杂、记忆点
    布局(杂,细节处理)
    自己修改代码后push推送到zhile
    js中call和apply的区别 / 函数的call、apply以及bind的作用与区别
    一元运算符a++、++a、a--、--a
    javascript基础语法和算术运算符
    不同空格符号的区别
    2020.12.11面试两家
  • 原文地址:https://www.cnblogs.com/mr3woman/p/10964457.html
Copyright © 2011-2022 走看看