博客作业--图

一、学习总结

1.1图的思维导图

1.2图结构学习体会

(1)深度优先遍历算法:从某个初始顶点出发,访问完初始顶点后,接着访问初始顶点的未被访问过的邻点,然后再访问该邻点的未被访问过的邻点,如果该邻点的所有邻点都访问过,则访问上一级的未被访问过的其他顶点,直至所有顶点都访问结束。类似于树的先序遍历。 

(2)广度优先遍历算法:从某个初始顶点出发,访问完初始顶点后,接着访问初始顶点的所有未被访问过的邻点,然后访问初始顶点的第一个邻点的所有未被访问过的邻点,初始顶点的第二个邻点的所有未被访问过的邻点,直至所有顶点都访问结束。类似于树的层次遍历。

(3)Prim算法:从某个初始顶点出发,将该初始顶点到各顶点的最短路径放入数组lowcost[]中,取数组lowcost[]中的最小值,取该顶点加入最小生成树的顶点集中,接着修改数组lowcost[](加入该顶点不导致产生回路),如此循环,直到生成最小生成树。

(4)Kruscal算法:用一个结构体数组E[]存放图的所有边,每次都寻找最小权值的那条边,并且满足加入该边的顶点后不会形成回路,如果形成回路则放弃这条边,继续寻找未被探访过的边,直至生成最小生成树。

(5)Dijkstra算法:从某个初始顶点出发,将该初始顶点放入数组path[]中,将该初始顶点到各顶点的最短路径放入数组dist[]中,取数组dist[]中的最小值,根据图的结构修改数组dist[],如果数组dist[]修改了,则数组path[]相对应的位置也要进行修改。

(6)Floyd算法:初始化数组A[]为图的邻接矩阵,数组Path[]都为-1。从第一个顶点开始考虑,如果A[i][j]>A[i][k]+A[k][j],则A[i][j]=A[i][k]+A[k][j],Path[i][j]=k,直到最后一个顶点考虑结束。

(7)拓扑排序算法:利用栈,将入度为0的顶点进栈。在栈不为空时循环,将栈顶元素出栈,同时将该顶点的所有后继顶点的入度减1,将入度为0的相邻顶点进栈,然后找下一个相邻顶点直至结束。

二、PTA实验作业

1.1题目1:图着色问题

1.2设计思路(伪代码或流程图)

1.3代码截图

1.4PTA提交列表说明

 错误1:子函数dapei中的最外面的for循环应该是从i=1到i==n-1。错误代码如下:

正确代码如下:

错误2:没有正确理解题目的意思,误以为只要分配的颜色种数不大于题目给出的即可,实际上,二者必须相等。

正确代码如下:

2.1题目2:排座位

2.2设计思路(伪代码或流程图)

2.3代码截图

2.4PTA提交列表说明

错误1:忘记改变编译环境。

错误2:最大N,全连通环,全查询时答案错误,在自己的这个算法中还没找出错误原因。

3.1题目3:公路村村通

3.2设计思路(伪代码或流程图)

3.3代码截图

3.4PTA提交列表说明

错误1:取值范围取太小,错误代码如下:

正确代码如下:

错误2:最大N和M,连通时答案错误,在自己的这个算法中还没找出错误原因。

三、截图本周题目集的PTA最后排名

3.1PTA排名

3.2我的总分:214分

四、阅读代码

 本次PTA题集中的7-7 旅游规划:

本题是一个Dijkstra的变式应用题。关键在于题目中说的,在路径都最短时输出花费最小的那个路径。就对原有的Dijkstra算法做了两点改动。都在找到最小边加入之后更新其他边时发生,一是当找到新加点的最短路径后,将路径和花费金钱都更新。二是若找到最短路径和原有的最短路径相同。那么只更新花费为小的那个即可。因为此题并没有要求输出最小的那个路径,所以在这一步里没有必要去做父亲结点数组。但如果要求输出路径,就需要再开一个数组做回朔了。

posted @ 2018-06-18 22:29  信管罗艺芳  阅读(184)  评论(0编辑  收藏  举报