zoukankan      html  css  js  c++  java
  • DS博客作业06--图

    DS博客作业06--图

    1.本周学习总结

    1.思维导图

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

        本章是对图的学习,本以为图会十分复杂,至少比树是要复杂的,没想到会比树好操作一点,主要是递归少,而且结构常用的就是邻接表和邻接矩阵。虽说比树简单一点,但还是会碰到一些问题,尤其是学习到Prim算法和Dijkstra算法,若不是反复多遍的看课本加上上课认真听课和经过课堂派的预习,真的不好理解。在pta的练习中,也是用了比较久的时间去完成作业,虽然没有遇到太大的坎坷,但耗时相比其他同学相对较高,这也许是代码的缺陷吧,关键路径也不太简单,不过没有代码要求,也算是减轻了一些难度,总之多刷题,bug改多了,准确率便高了。

    2.PTA实验作业

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

    2.1.1设计思路(伪代码)

    Judge函数传入邻接表G,数组s   //s数组存各个结点的颜色,在main中已经判断颜色种类符合题意
        定义整型i,v
        for v=1 to v=G->n do
            p指向以结点v为头结点的第一个边结点
            while p不为NULL do
                if 结点v的颜色s[v]与p结点的颜色相同 then
                    输出No并退出函数
                end if
                p指向下一个结点
            end while
        end for
        输出Yes

    2.1.2代码截图

    2.1.3本题PTA提交列表说明。

    Q1:本题是深度遍历的练习,刚开始也是往深度遍历,写的过程中发现其实直接对邻接表中链表逐一进行遍历就可以

    A1:所以我就用此方法很快就写完了

    Q2:提交后发现有一个测试点没过

    A2:原来颜色数目少于题目要求也是错的,然后就过了

    2.2 题目2:7-3 六度空间

    2.2.1设计思路(伪代码)

    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.2.2代码截图

    2.2.3本题PTA提交列表说明。

    Q1:本题在陆大机房就开始尝试,当时图结构还不是很熟悉,打的巨慢,而且不知道如何进行遍历

    A1:代码拿回来,之后想到用广度遍历可以比较好的解决这个问题

    Q2:写完后,自己感觉也没啥问题,一提交,测试点有一个过不了,而且是运行时错误

    A2:只能对代码进行再次修改,把循环从3层换成了两次,经过多次尝试最后通过

    2.3 题目3:7-7 旅游规划

    2.3.1设计思路(伪代码)

    Dijkstra函数传入邻接表G,开始结点Begin,结束结点End
        定义整型v,i,k,MIN1,MIN2
        定义边结点指针p
        定义整型数组dist1[1000],path[1000],dist2[1000]
        定义整型数组visited[1000]
        for i=0 to i=G->n-1 do
            对dist1,dist2,path数组初始化
        end for
        v=Begin,dist1[v]=0,dist2[v]=0
        while 1 do
            MIN1=MIN2=1000000  //初值
            for i=0 to i=G->n-1 do     //找dist1最小结点,若相等则找dist2较小的
                if MIN1>=dist[i]且visted[v]不为1 then
                    if MIN1>dist1[i]或MIN2>dist2[i] then
                        MIN1=dist1[i],MIN2=dist2[i],v=i
                    end if
                end if
            end for
            if v==End then break   //结束
            visted[v]=1   //表示已经选择过的结点
            p指向以v为头结点的第一个边结点
            while p不为NULL do    //修改dist1和dist2
                if p->length + dist1[v]<=dist1[p->adjvex] then
                    if p->length+dist1[v]<dist1[p->adjvex]或p->price+dist2[v]<dist2[p->adjvex] then
                        对dist1,dist2,path 进行修改
                     end if
                end if
                p指向下一个结点
            end while
        endwhile
        输出dist1[v]和dist2[v]

    2.3.2代码截图

    2.3.3本题PTA提交列表说明。

    Q1:这一题主要问题是对Dijkstra算法的使用,这个算法刚接触比较陌生,写本题代码时一时无从下手

    A1:看了课本,发现本题的代码用课本里的代码改造一下即可,最后在自己写一遍,经过多次调试过了

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

    3.1.1截图错题代码:7-1 六度空间 


    3.1.2 错的原因及处理方法

         此题错的非常可惜,把64句删掉就可以过。(陆大216的编译器真心不行。。。)

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

          此题上机课没打

    3.2.2 错的原因及处理方法

  • 相关阅读:
    Golang结构体序列化与反序列化时默认值的问题
    Golang在函数中给结构体对象赋值的一个坑
    Go出现panic的场景
    Redis内存使用率增长的一些解决思路
    「转」50个Go新手容易犯的错误
    关系型数据库跨时区查询简介
    Golang中append与copy内置函数介绍
    实践案例1利用低代码开发平台Odoo快速构建律师事务所管理系统
    自助分析工具Power BI的简介和应用
    一个开源免费高颜值的轻量级商业智能BI平台Superset 介绍
  • 原文地址:https://www.cnblogs.com/putianliuzhong/p/10959529.html
Copyright © 2011-2022 走看看