一、知识点整理
(一)图论的相关算法:
1.广度优先搜索:
用队列实现(广度优先搜索树不唯一)
从起点开始,标记已经访问过了;当队列非空的时候,就取首元素,然后元素出队,所有与该元素相邻且未被访问过的点入队列;标记入队的元素已经被访问过了。
2.深度优先搜索:
用栈实现,(递归实现)
将顶点入栈,如果有相邻的点,就将其入栈,直到没有相邻点就将其出栈,然后找在栈顶的元素其他的相邻点,如果没有则该点出栈直到栈空。
(二)最小生成树:(Prim算法,Kruskal算法)
Prim算法:
任选一个点,将这个点加入到一个集合当中,然后从不在该集合中的点中选一个点使得该点和任选的那个点之间的距离最短,然后将该点加入集合,该边为最小生成树的一条
边。(简单来说就是从一个顶点开始找最小边,并且使加入该边没有回路,直到所有顶点都用完)
Kruskal算法:
将边按权值从小到大排列后逐个判断,如果当前边加入后不会产生环,那么就把这条边当作最小生成树的一条边,最终得到的结果就是最小生成树。(留下所有顶点,将所有边
去掉,挨个加边,但是保证加入该边不会形成回路,直到加入(顶点-1)条边)
(三)最短路径:(单源最短路径、每对顶点的最短路径)
1.单源最短路径
Bell-Ford算法
spfa算法
dijskal算法
2.每对顶点的最短路径:
Floyd:每次以一个顶点为源点,调用Dijkstra算法n次。
二、感想
专题四结束了,也就意味着ACM课结束了。一个学期就这么过去了,真快。图的相关知识已经在好几门课上学过了,学起来比较容易,但是算法做起来还不是特别容易,尤其最后这段时间专业课都结课考试,也静不下心来去作这些程序题,做的题量也不大,总之我觉着这个专题完成的不大好。