1 孤岛数
给定一个布尔矩阵,求孤岛数。一组相连的1形成一个岛。例如,下面的矩阵包含5个岛:
在讨论问题之前,让我们先了解什么是连接组件。无向图的连通分量是一个子图,其中每两个顶点通过一条路径相互连接,并且不与子图外的其他顶点连接。
所有顶点相互连接的图只有一个连接组件,由整个图组成。这种只有一个连通分量的图称为强连通图。
通过在每个组件上应用DFS()可以轻松解决此问题。在每个DFS()调用中,访问一个组件或一个子图。我们将在下一个未访问的组件上调用DFS。调用DFS()的次数给出了连接组件的数量。也可以使用BFS。
2 什么是岛屿?
一组相连的1形成一个岛。例如,下面的矩阵包含4个岛
2D矩阵中的一个单元可以连接到8个相邻单元。因此,与标准DFS()不同,在标准DFS()中,我们递归调用所有相邻顶点,而在这里,我们只能递归调用8个相邻顶点。我们跟踪已访问的1,以便不再访问它们。
参考:
C#,图(Graph)的数据结构设计与源代码