20182320《程序设计与数据结构》第十周学习总结

20182320《程序设计与数据结构》第十周学习总结

教材学习内容总结

1.图的概念

关于图的概念,老师在课堂上已经较为详细地说明过了,因此不再赘述。
重要的概念有:无向图、有向图、顶点、边……

2.图的遍历

2.1 广度优先遍历

2.1.1 概念

与树的层序遍历相似,按照路径长度由小到大的顺序,优先遍历属于同一层的顶点。

2.1.2 实现思路

运用迭代器、队列。
首先把开始顶点入队列,标记其为已访问,然后开始如下循环:
从队列中取一个顶点,将其添加到迭代器中,然后将这个顶点的所有未访问的邻接顶点入队列,同时将这些顶点标记为已访问,直到队列为空。

2.2 深度优先遍历

2.2.1 概念

类似于树中的先序遍历,从开始顶点开始,一条路走到黑,一直往下访问顶点,直到没有下一个顶点可以访问。

2.2.2 实现思路

和广度优先遍历类似,只需要把队列结构换成栈就行了。

2.3 图的建立

2.3.1 邻接表


邻接表是一种数组和链表结合的存储图的方法,和我们之前实现的哈希排序之链地址法有点相似。

2.3.2 邻接矩阵


邻接矩阵可用于表示有向图或无向图的连接情况,横纵坐标表示连接的两个结点,矩阵内可存入0,1或true,false来表示两节点是否有连接。在表示无向图连接的时候,矩阵是对称的。

教材学习中的问题和解决过程

问题1:

在学习的时候感觉使用数组实现图的建立有很多模糊的地方,比如,邻接矩阵在存储无向图的时候是只用右上三角还是使用整个矩阵?

问题1解决方案:

充分了解每个部分的功能。

代码调试中的问题和解决过程

问题1:

一开始想用链表结构来实现PP19_1,但是最后发现在未知某个节点与多少个其他节点有连接的时候,确定下一个连接比较麻烦。

问题1解决方案:

采用多个数组来实现图会更加方便。

问题2:

在根据书上代码进行实现的时候,发现我的IDEA的ArrayIterator和书上的不太一样,需要加入参数才能使用。

问题2解决方案:

把ArrayIterator替换成ArrayList,有同样的功能。

问题3:

程序报错

问题3解决方案:

查找CSDN

使用第二条方法。

代码托管

上周考试错题总结

上周无考试。

结对及互评

点评过的同学博客和代码

  • 本周结对学习情况
    • 20182307
    • 结对学习内容
      • 图的构建方法
      • 图的遍历实现
      • 图的最短路径
  • 上周博客互评情况

其他(感悟、思考等,可选)

这周所学习的图与上周学习的树有很大关联,树本质上就是图,但是它们在构建和实现遍历的方面有有着些许不同。这周我理解的较为透彻的,能自己用代码实现的知识是图的深度和广度遍历,它们都很好地运用了我们之前学习的队列结构和栈结构。然而图在涉及权值和有向的情况下,构建情况就会变得更加复杂,我还需要进行深入学习。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行 30篇 400小时
第一周 208/208 2/2 9/9
第二周 258/466 2/4 15/24
第三周 693/1159 2/6 22/46
第四周 1383/2542 2/8 30/76
第五周 1300/3842 2/10 22/98
第六周 1998/5840 2/12 24/122
第七周 2901/8741 2/14 30/152
第八周 3556/12297 2/16 30/182
第九周 12297/13394 3/19 32/214
posted @ 2019-11-27 22:53  郑力元  阅读(212)  评论(0编辑  收藏  举报