图是一种灵活的数据结构,一般作为一种模型用来定义对象之间的关系或联系。对象由顶点(V
)表示,而对象之间的关系或者关联则通过图的边(E
)来表示。
图可以分为有向图和无向图,一般用 G=(V,E)
来表示图。经常用邻接矩阵或者邻接表来描述一副图。
在图的基本算法中,最初需要接触的就是图的遍历算法,根据访问节点的顺序,可分为广度优先搜索(BFS
)和深度优先搜索(DFS
)。
深度优先算法
深度优先搜索在搜索过程中访问某个顶点后,需要递归地访问此顶点的所有未访问过的相邻顶点。
N 皇后问题
实例,以 Leetcode 51
题
题目, 在 N * N
的棋盘上摆放 N
个皇后,使得任意两个皇后都不能处于同一行、同一列或同一斜线上;
1 | # -*- coding: UTF-8 -*- |
广度优先算法
广度优先遍历是连通图的一种遍历策略。因为它的思想是从一个顶点 V0
开始,辐射状地优先遍历其周围较广的区域,故得名。
岛的数量
实例,以 Leetcode 200
题
题目, 在一个 2 维数组中, 1 表示岛,0 表示水,求被水环绕的岛的数量;
1 | 11110 |
上面的例子中,被水(0) 环绕的岛(1)的整体只有 1 个,所以结果就是 1 啦;
1 | # -*- coding: UTF-8 -*- |