学习过程主要依照中国MOOC课程,感谢MOOC,感谢浙大授课大佬。
什么是图
概念
图:表示“多对多”的关系
包含:
- 一组顶点:通常用V(Vertex)表示顶点集合;
- 一组边:通常用E(Eege)表示边的集合;
边是顶点对:
无向边(v,w)∈E,其中v,w∈V
有向边<v,w>∈E,其中v,w∈V
程序中图的表示
- 邻接矩阵:G[N][N]-N个顶点从0到N-1编号
G[N][N]=1(< vi,vj>是G中的边)/0(< vi,vj>不是G中的边)。
对于有N个顶点的无向图,用一个长度为N(N+1)/2的1维数组存储可以省一半空间。
1 | /* 图的邻接矩阵表示法 */ |
- 邻接表:G[N]为指针数组,对应矩阵每行一个链表,只存非0元素。
1 | /* 图的邻接表表示法 */ |
图的遍历
DFS
站在一个路口,看有几条路还没走,选择其中一条往下走,走到下一个路口,继续判断,如没有,则原路返回上一个路口,看上一个路口是否有没走的路,如没有则继续原路返回。
1 | /* 邻接表存储的图 - DFS */ |
BFS
指定一个起点,把它压到队列里,在把它弹出队列时,将与它相连的点一一压到队列里,以此类推。
1 | /* 邻接矩阵存储的图 - BFS */ |
以上。
注:转载文章请注明出处,谢谢~