1.本周学习总结
1.1思维导图
1.2谈谈你对图结构的认识及学习体会
感觉图的这边就已经有一点跟不上了,而且知识点众多,我具体总结了一下,大体上应该就有以下几种:
- 深度遍历算法:其过程类似于前序遍历,从图中某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点处出发深度优先遍历图,直至图中所有和v有路径相通的顶点都被访问。
- 广度遍历算法:其过程类似于层次遍历,借助队列来实现。若把遍历的过程比喻成找东西,深度优先遍历意味着要彻底找完一个房间才查找下一个房间,而广度优先遍历是把所有房间显眼的地方找一遍,然后一步步扩大查找的范围。
- Prim和Kruscal算法:用于最小生成树。两种方法是不同的,prim算法是从某个顶点出发,找跟它距离最近的点,又从新找到的这个点找跟它距离最近的点,一直重复这个过程。kruscal算法是每次都找权值最小的边,并且这些边不会构成一个环,如果会构成环,那就找其他的边。二者都是对贪心算法的改进而生成的算法
- Dijkstra算法:是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
- 拓扑排序算法:将有向图中的顶点以线性方式进行排序。即对于任何连接自顶点u到顶点v的有向边uv,在最后的排序结果中,顶点u总是在顶点v的前面。
2.PTA实验作业
2.1.题目1:7-1 图着色问题
2.1.1设计思路(伪代码)
主函数
判断给的颜色c是否大于给出的顶点数 ,是就输出NO,结束
建图,输入判断的组数v
while(v--)
输入颜色for i=0 to n
判断颜色是否不同于c给的数量if(!number(A,c,n)),是输出NO
不是,利用双层循环遍历邻接矩阵
当相邻顶点颜色相同时 if(A[i]==A[j])输出NO,flag=1
或者当遍历完矩阵还未输出(flag==0),则输出YES
end while
计算颜色的函数
就是一个简单计算颜色种类的函数
建树函数
用领接矩阵建树,这里就不截图了。
2.1.2代码截图
2.1.3本题PTA提交列表说明。
说明:
- 一开始用领接表的结构创建图结构,因为代码可能比较复杂,还不能太好的掌握就换成了邻接矩阵的做法。
- 输出NO的时候忘记换行。
2.2 题目2 :7-3 六度空间
2.2.1 设计思路
定义整型变量i,j,total,浮点型变量result
输入n、m的值(全局变量)
调用函数建图
for i=1 to i<=n
total=0
for j=1 to j<=n
visited数组初值都置为0(全局变量)
end for
广度遍历第i个人
for j=1 to j<=n
计算visited数组总共有几个人被访问过
end for
计算result的值
输出result
end for
广度遍历
定义整型变量 i,front,rear,count1=0,count2=0.flag=1
定义队列queue[MAXV]
front=rear=-1
标记第v个人已访问
将这个人进入队列
while 队列不为空
v=队头元素
for i=1 to i<=n
if 跟v是朋友并且没有访问过
将这个人进队,并计算出这一层关系一共有几个人
if 这一层关系的所有人都出队列后
层数num加1
if 层数num等于6
结束循环
end while
2.2.2 代码截图
2.2.3本题PTA提交列表说明。
说明:
- 忘记了空格的输出
- 在num=6等于6的时候忘记进行循环的停止
2.3 题目3 7-4 公路村村通
2.3.2 设计思路
Prim函数
定义数组lowcost[3001],closest[3001]
定义整型变量min,total=0,count=1,i,j,k,v;
if m<n-1(n代表城市数目,m代表道路数目)即道路不畅通
return -1
for i=0 to i<n
给数组lowcost和closest置初值
end for
for i=1 to i<n
min=INF
for j=0 to j<n
找到最小的边
end for
total=total+最小边的权值
最小边的另一个顶点lowcost[k]置为0
for j=0 to j<n
给数组lowcost和closest重新赋值
end for
end for
if count不等于顶点数
return -1
else
return total的值
2.3.2 代码截图
2.3.3 PTA提交列表说明
说明:
- pta上的编译器调成了c的编译器。
- 一开始照抄书本上的prim算法输出不出。
3、上机考试错题及处理办法
3.1.截图错题代码
7-1 六度空间 (20 分)
“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。
ps:因为我上机考只做了自己会的其他题没做,我就把我没做的部分题目列出来了。
3.2 错的原因及处理方法
这题其实并不难,可能是在想6.1想太久了,这题六度空间用一个广度遍历遍历出所有的节点数并控制它小于六就好了。