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

1.思维导图

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

  1. 这章学习了图,学习了图的两种存储结构:邻接矩阵和邻接表。这两种存储结构都用到了之前学c时学到的结构体,将结构体充分运用。知道了图的两种遍历方法:深度优先遍历(DFS)和广度优先遍历(BFS)。深度优先遍历是一个对每个结点查找其邻接点的过程,而广度优先遍历则搜索了所有节点。
  2. 通过学习Prim算法和Kruskal算法,解决了最小生成树问题。在学习Prim算法的同时,还提到了贪心算法,之前学习的贪心算法只能解决局部最优的问题,所以最小生成树的问题不可以用贪心算法来做。
  3. 学习最短路径时,先学的Dijstra算法,但是Dijstra算法存在只能解决最短路径,而不能解决最长路径的问题,由此引进了Floyd算法,在满足最小路径查找的同时也能满足最长路径的查找。
  4. 拓扑排序和关键路径都是对有向无环图的操作。拓扑排序可以用来判断一个有向图是否有环,还可以解决教学系统中的排课问题;关键路径则是用来解决最短工时的问题。

2.PTA实验作业(6分)

2.1.7-1 图着色问题

  1. 图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?
  2. 但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。

2.1.1设计思路(伪代码)

  1. //设计思路
  2. 先建一个无向图的邻接矩阵。在每次判断解是否正确的过程中:先判断使用的颜色是否为k种,是,则继续操作,反之,输出“No”进入下一轮循环;用双重for循环判断每个结点的临边颜色是否符合要求。
  1. //伪代码(主函数)
  2. 定义三个整型变量vekn,分别用于存放结点数、边数、颜色数,和 解的数量;
  3. 输入vek
  4. 定义一个MGraph型变量G
  5. 利用CreatMGrap函数创建无向图;
  6. 输入解的数量n
  7. while n-- do
  8. 定义int型变量:flag=1,用于控制解不正确时的情况;num数组,用于存储各个结点的颜色;count=0,用于计算各个接中使用的颜色数量;hash数组,用于控制颜色数量的计算;
  9. for i=0 to G.n do
  10. 输入num[i];
  11. if hash[num[i]]等于0 then //num[i]颜色没出现过时
  12. hash[num[i]]++;
  13. count++;
  14. end if
  15. end for
  16. if count的值与k不相等时 then
  17. 输出“No
  18. continue进入下一轮循环
  19. end if
  20. for i=0 to G.n do
  21. for j=i to G.n do //无向图的邻接矩阵关于对角线对称,所以只要判断半个邻接矩阵
  22. if ij不相等 then
  23. if ij结点的颜色相同 ij结点间有边 then
  24. 输出“No
  25. flag=0
  26. break
  27. end if
  28. end if
  29. end for
  30. if flag=0 then
  31. break
  32. end if
  33. end for
  34. if flag=1 then
  35. 输出“Yes
  36. end if
  37. end while

2.1.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)





2.1.3本题PTA提交列表说明。

  • Q1:第一次提交,是把判断解是否正确的那一部分写成一个函数的,结果提交上去显示答案错误。当时以为我的函数有什么问题,就把函数拆了,直接写到主函数里头,结果还是答案错误。
  • A1:我想着代码没问题啊,调试也没毛病,突然,想到答案错误还有一种情况:输出的问题,看一眼题目要求,好吧,yes和no的首字母要大写,我没大写。

  • Q2:然后,改完以后,部分正确,还有两分不知道错在哪,提示的是有小于k种颜色的情况错误。

  • A2:当时在想,我的做法小于k种颜色的情况也可以正确判断啊,为什么会显示这个错误。当时舍友在一边,我就问她着色的时候可不可以不用到k种颜色这么多。她说,当然可以啊。然后,我就很纳闷,到底哪儿错了。后来抱着试一试的心态,将使用的颜色小于k的情况也当走是错的,结果就过了。

2.2 7-6 修建道路

  1. N个村庄,从1N编号,现在请您兴建一些路使得任何两个村庄彼此连通。我们称村庄AB是连通的,当且仅当在AB之间存在一条路,或者存在一个存在C,使得AC之间有一条路,并且CB是连通的。
  2. 已知在一些村庄之间已经有了一些路,您的工作是再兴建一些路,使得所有的村庄都是连通的,并且兴建的路的长度是最小的。

2.2.1设计思路(伪代码)

  1. //伪代码(Prim函数)
  2. 定义一个int型数组lowcost[],变量MIN用于存放最小值,v,赋初值为1cost用于计算花费,赋初值为0
  3. 定义一个int型数组closest[],用于存放最近的结点,变量ijk,用于循环中
  4. 定义一个ArcNode型变量p
  5. 0赋值给lowcost[v]
  6. for i=2 to 图的节点数 do
  7. lowcost[i]=10000001 //赋初值,令数组的初值最大
  8. end for
  9. G->adjlist[v].firstarc的值赋给p
  10. while p不为空 do
  11. p->weight的值赋给lowcost[p->adjvex]
  12. v的值赋给closest[p->adjvex]
  13. p等于p指向的下一个结点
  14. end while
  15. for i =1 to 图的节点数 do
  16. 赋初值1000000MIN
  17. for j=1 to 图的结点数 do
  18. if lowcost[j]不等于-1 小于MIN then
  19. lowcost[j]的值赋给MIN
  20. j的值赋给k
  21. end if
  22. end for
  23. MIN的值累加给cost
  24. lowcost[k]=-1
  25. G->adjlist[k].firstarc的值赋给p
  26. while p不为空 do
  27. if p->weight小于lowcost[p->adjvex] lowcost[p->adjvex]不等于-1 then
  28. p->weight的值赋给lowcost[p->adjvex]
  29. k的值赋给closest[p->adjvex]
  30. end if
  31. p等于p指向的下一个结点
  32. end while
  33. end while
  34. 输出cost

2.2.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)









2.2.3本题PTA提交列表说明。

  • Q1:这题答案错误,一开始没发现什么毛病,该赋值的也赋值了,后来无意间发现,好吧,赋初值的位置放错了。

  • A1:改过来之后就对了。

2.3 7-7 旅游规划

  1. 有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。

2.3.1设计思路(伪代码)

  1. //伪代码(Dijkstra函数)
  2. 定义int型变量v,iMIN1MIN2
  3. 定义ArcNode型变量p
  4. 定义int型数组dist1[1000]、path[1000]、dist2[1000]
  5. 定义一个int型静态局部变量数组visted[1000]
  6. for i=0 to 图的节点数 do
  7. dist1[i]=100000
  8. dist2[i]=100000
  9. path[i]=-1
  10. end for
  11. Begin的值赋给v
  12. 0分别赋给dist1[v]和dist2[v],将v赋给path[v]
  13. while 1 do
  14. 100000分别赋给MIN1MIN2
  15. for i=0 to 图的结点数 do
  16. if dist1[i]的值小于MIN1 visted不等于1 then
  17. if dist1[i]的值小于MIN1 或者 dist2[i]的值小于MIN2 then
  18. dist1[i]的值赋给MIN1
  19. dist2[i]的值赋给MIN2
  20. i的值赋给v
  21. end if
  22. end if
  23. end for
  24. if v等于END then
  25. 退出循环
  26. end if
  27. visted[v]=1
  28. G->adjlist[v].firstarc的值赋给p
  29. while p不为空时 do
  30. if p->lengthdiat1[v]的和 小于等于 dist1[p->adjvex] then
  31. if p->lengthdiat1[v]的和 小于 dist1[p->adjvex] 或者 p->pricediat2[v]的和 小于 dist2[p->adjvex] then
  32. p->lengthdiat1[v]的和赋给dist1[p->adjvex]
  33. p->pricediat2[v]的和 赋给dist2[p->adjvex]
  34. v的值赋给path[p->adjvex]
  35. end if
  36. end if
  37. p等于p指向的下一个结点
  38. end while
  39. end while
  40. 输出dist1[v]和dist2[v]的值

2.3.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)









2.3.3本题PTA提交列表说明。

  • 这题主要是关于迪杰斯特拉算法的一个应用。代码基本都是照着书上的代码修修改改完成的。然后调试什么的都在VS上完成了。

3、上机考试错题及处理办法(-2--2分)

  • 当时上机考试的时候,因为时间问题和对这章知识的不熟悉,只做了两道题(两道题都做出来了)。当时还剩几分钟的时候看了一下六度空间的题目,当时代码打了一半半时间就到了,就没打完,就把回来后打的代码贴上来。
  1. //解题思路
  2. 利用广度优先遍历的算法来找到距离小于6的结点个数,来算出百分比
  1. //伪代码(bfs函数)
  2. 定义int型变量i,数组vis[10001],并赋初值为0
  3. 定义int型变量last,令其等于num(用来记录每层的最后一个元素);tail,用于记录每层压入时的结点,level,并赋初值为0count赋初值为1
  4. 定义一个int型队列q
  5. num入队
  6. 1赋给vis[num]
  7. while q不为空时 do
  8. 将队头的值赋给num
  9. 出队
  10. for i=1 to v do
  11. if g[num][i]等于1 vis[i]等于0 then
  12. count++
  13. 1赋给vis[i]
  14. i入队
  15. i 赋给tail
  16. end if
  17. end for
  18. if last等于num then //弹出的x等于当前层的最后一个元素
  19. level++
  20. tail的值赋给last
  21. end if
  22. if level的值为6 then
  23. 退出循环
  24. end if
  25. end while
  26. count的值返回主函数





DS博客作业06——图的更多相关文章

  1. DS博客作业06—图

    1.本周学习总结 1.1思维导图 1.2学习体会 2.PTA实验作业 2.1 图着色问题 图着色问题是一个著名的NP完全问题.给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色, ...

  2. C语言博客作业06——结构体&文件

    C语言博客作业06--结构体&文件 1.本章学习总结 1.1思维导图 1.2.本章学习体会 在本周的学习中,我们学习了关于结构体和文件的内容.结构体的本身并不难,但以结构体为基础的链表还是让我 ...

  3. DS博客作业——树

    DS博客作业--树 1.本周学习总结 1.思维导图 2.谈谈你对树结构的认识及学习体会. 在树这一章节,我们学习的是二叉树的算法. 树的构建:一种是直接给树的顺序存储结构的字符串,一种是通过先序遍历和 ...

  4. DS博客作业--07查找

    目录 DS博客作业--07查找 1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 2.1.题目1:6-1 二叉搜索树的操作集 (30 分 ...

  5. DS博客作业05--查找

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业05--查找 这个作业的目标 学习查找的相关结构 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1.1 ...

  6. DS博客作业04--图

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业04--图 这个作业的目标 学习图结构设计及相关算法 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1. ...

  7. DS博客作业08--课程总结

    DS博客作业08--课程总结 1.当初你是如何做出选择计算机专业的决定的? 1.1 经过一年学习,你的看法改变了么,为什么? 1.2 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 1. ...

  8. C语言l博客作业06

    C语言l博客作业06 问题 回答 这个作业属于哪个课程 C语言程序设计ll 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homew ...

  9. DS博客作业03--树

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业03--树 这个作业的目标 学习树结构设计及运算操作 姓名 黄静 目录 0. PTA得分截图 1. 本周学习总结 ...

随机推荐

  1. 洛谷 P3143 [USACO16OPEN]钻石收藏家Diamond Collector

    题目描述 Bessie the cow, always a fan of shiny objects, has taken up a hobby of mining diamonds in her s ...

  2. (四)SpringMVC之使用cookie实现记住密码的功能

    注意:因为实现记住密码的功能需要用到json,所以需要加上这条语句: <script type="text/javascript" src="scripts/jqu ...

  3. Oracle RAC Brain Split Resolution

    大约是一周前,一位资深的Oracle工程师向我和客户介绍RAC中脑裂的处理过程,据他介绍脑裂发生时通过各节点对voting disk(投票磁盘)的抢夺,那些争抢到(n/2+1)数量voting dis ...

  4. UVALive 3026 Period (KMP算法简介)

    kmp的代码很短,但是不太容易理解,还是先说明一下这个算法过程吧. 朴素的字符串匹配大家都懂,但是效率不高,原因在哪里? 匹配过程没有充分利用已经匹配好的模版的信息,比如说, i是文本串当前字符的下标 ...

  5. UVA 810 A Dicey Promblem 筛子难题 (暴力BFS+状态处理)

    读懂题意以后还很容易做的, 和AbbottsRevenge类似加一个维度,筛子的形态,可以用上方的点数u和前面的点数f来表示,相对的面点数之和为7,可以预先存储u和f的对应右边的点数,点数转化就很容易 ...

  6. [学习笔记] C++ 历年试题解析(一)--判断题

    少说话.. 程序题链接:https://www.cnblogs.com/aoru45/p/9898691.html 14级试题---选择题 1. 引用在声明时必须对其初始化,以绑定某个已经存在的变量( ...

  7. 2018.5.5 phpStorm破解2017.3版本方法

    方法一 注册时,在打开的License Activation窗口中选择"License server",在输入框输入下面的网址: http://im.js.cn:8888 (新) ...

  8. python之道10

    写函数,函数可以支持接收任意数字(位置传参)并将所有数据相加并返回. 答案 def func(*args): count = 0 for i in args: count += i return co ...

  9. PhoneGap+JQuery Mobile移动应用开发学习笔记

    最近一直在学习使用PhoneGap+JQuery Mobile的开发框架开发Android应用,抛开这个框架的运行效率不说,暂且将使用中遇到的问题进行一下整理. 1.JS文件引用顺序 也许在进行web ...

  10. shell脚本,awk取奇数行与偶数行方法。

    第一种方法: 第二种方法: 第三种方法: