【发布时间】:2017-11-15 16:29:13
【问题描述】:
我正试图从 CodeFights 中找出这个问题,但我对图形遍历没有太多经验,所以我很挣扎。我为这个特定问题阅读的提示之一是“图遍历”,所以我做了一个 BFS,但我不确定如何获得云的数量。
无论出于何种原因,这个问题和许多其他问题,在为它编写代码时,我的大脑往往会一片空白。我试图找到连续的 1 但无济于事。谁能帮帮我?
https://codefights.com/interview/pDTvSuHBgAB9dz5ik/companies/N3sScnJbzdPDQaHPj
给定一个由“1”(云)和“0”(晴空)组成的 2D 网格天空图,计算云的数量。云被晴朗的天空包围,由相邻的云水平或垂直连接而成。您可以假设天空地图的所有四个边缘都被晴朗的天空所包围。
例子
skyMap = [['0', '1', '1', '0', '1'],
['0', '1', '1', '1', '1'],
['0', '0', '0', '0', '1'],
['1', '0', '0', '1', '1']]
输出应该是 countClouds(skyMap) = 2;
skyMap = [['0', '1', '0', '0', '1'],
['1', '1', '0', '0', '0'],
['0', '0', '1', '0', '1'],
['0', '0', '1', '1', '0'],
['1', '0', '1', '1', '0']]
输出应该是 countClouds(skyMap) = 5.
【问题讨论】:
-
我可以看到即使
1的一个未包围单元格作为值也被视为云,我错了吗? -
DFS 也可以。如果节点已被访问,您应该保留一个布尔数组,该数组存储 true,否则存储 false。递归遍历 2D 数组,如果没有访问过节点,则每次都会更深一层。如果已经访问了一个节点,则移动到下一个节点,否则增加一个计数器并递归。访问完所有节点后停止。
-
@Yahya 你是对的。
-
我会创建一个方法,每次调用它时检查邻居,然后递归遍历数组。请参阅this answer,它为您的项目提供了起点。
-
重复项解决了这个问题的一个更复杂的版本,但在这里可以使用相同的方法。也类似于Number of Groups/Islands of 1's in a Matrix: Definition clarification。
标签: java algorithm data-structures depth-first-search breadth-first-search