• DS博客作业06--图


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

    1.思维导图

    2.学习体会。

    深度遍历DFS通过递归实现,代码简洁,广度遍历BFS通过队列实现,代码略长。都是对图的遍历,两种都行,有不同的作用。
    prim算法用来求最小生成树,用lowcost数组存放最小的路可以说是很巧妙地算法,有点长,有点难背,求最短生成树时还能用卡鲁斯卡尔算法。
    Dijkstra算法用来求最短路径,通过path数组存放前驱,dist数组存放从初始点到下标点的权值,更加的巧妙,同样求最短路径还可以用弗洛伊德算法。
    拓扑排序可以用栈也可以用队列,通过在结构体新加一个变量表示入度来实现。

    2.PTA实验作业(6分)

    2.1.题目1:7-1 图着色问题

    2.1.1设计思路

    输入顶点数与边数,颜色数进行建图
         输入待检查的颜色分配方案的个数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:此题既需要考虑颜色是否够用,又要考虑相邻颜色是否一样,刚开始未考虑全,答案错误。
    • A1:增加代码进行判断相邻颜色是否一样。
    • Q2:设定flag来判断输出结果时设置错误
    • A2:修改flag不同值对应的不同结果

    2.2 题目2:六度空间

    2.2.1设计思路

    int bfs(int v)  
    {  
        初始化队列
        while(队不空)  
        {  
           出队元素z
            for  i=1 to 顶点数
            {  
                若g[z][i]==1 && vis[i]==0
                {  
                    count++;  
                   把i进队
                    tail=i;  
                }  
            }  
           若v为该层最后一个结点
            {  
                层数++
                更新层末的顶点
            }  
           若层数为6
                跳出循环
        }  
        返回count的值
    } 

    2.2.2代码截图

    2.2.3本题PTA提交列表说明。

    • Q:以老师讲的思路设计bfs函数去实现代码,但有些困难,写的代码改了好久还是答案错误。
    • A:询问同学自己代码的错误点,改正后正确。

    2.3 题目3:7-4 公路村村通

    2.3.1设计思路

    int Prim(int S,int v)//prim算法计算最短路径 
    {
       定义循环变量V;for V=1 to 顶点数 {
        dist[V]=G[1][V];
      } 
        while(1)
        {

        以allweight更新记录权值长度
          dist[V]=0;
    在findmin函数
    中找出离各村最近的顶点 minV记录最近顶点的编号,return回去给V
         找完时跳出循环 }
    返回allweight的值 }

    2.3.2代码截图

    2.3.3本题PTA提交列表说明。

    •  Q1:此题用常规的prim算法来做,有些测试点过不去,一直部分正确或多种错误。
    • A1:在常规的prim算法中加入findmin函数来找最短距离,并更改prim算法的设计格式。
    • Q2:在函数调用方面出现问题,函数return回去值后会计算错误。
    • A2:更改后答案正确。

    3、上机考试错题及处理办法

    3.1.1截图错题代码 6-1 jmu-ds-最短路径

     

    此题在考试时未能想出来解决办法,就按一般的dikstra算法来打,但是没能想出如何与已给函数结合,分数未拿到。

    3.2.1 错的原因及处理方法

    了解dikstra算法的基本思想:设置一个集合S存放已经找到最短路径的顶点,S的初始状态只包含源点v,对vi∈V-S,假设从源点v到vi的有向边为最短路径。以后每求得一条最短路径v, …, vk,就将vk加入集合S中,并将路径v, …, vk , vi与原来的假设相比较,取路径长度较小者为最短路径。重复上述过程,直到集合V中全部顶点加入到集合S中。配合已给的void Dispath(int dist[],int path[],int s[],int n,int v);void Ppath(int path[],int i,int v);void PrintMGraph(MGraph g); 三个函数,并请教同学,将此题解决。

    3.1.2截图错题代码   jmu-ds-拓扑排序

    3.2.2 错的原因及处理方法

    错误原因:找第一个相邻结点入度为0的相邻顶点进栈,找下一个相邻结点时设计出错

    处理方法:明确思路:栈ST的指针为top;入度置初值0;求所有顶点的入度;入度为0的顶点进栈;栈不为空时,入度为0的顶点进栈,出栈,输出顶点,找第一个相邻结点;入度为0的相邻顶点进栈,找下一个相邻结点。然后更改找下一个结点的指针,解决问题。

    3.1.3 六度空间

    3.3.2 错的原因及处理方法

    原因:以老师讲的思路设计bfs函数去实现代码,但有些困难,写的代码改了好久还是答案错误。

    方法:询问同学自己代码的错误点,改正后正确。

  • 相关阅读:
    音视频-x624和H.264
    状态机解决复杂逻辑及使用
    任意程序上的蒙版画笔实现
    WPF-3D圆柱体透视
    WPF-3D-Z-buffering 导致的遮盖物体不渲染问题
    WPF3D立方体图形展开动画思路
    解决Prism 8.0 I添加InvokeCommandAction xaml报错问题
    Spark编程基础(Python版)
    前端开发工具fscapture
    修改element ui select选择器 样式
  • 原文地址:https://www.cnblogs.com/qqcom/p/10956325.html
Copyright © 2020-2023  润新知