【发布时间】:2021-06-09 17:28:34
【问题描述】:
给出城堡的平面图,用字符串类型的二进制矩阵表示: 每个二进制代码都属于一个特定的单元格。一个单元格有四个边,因此我们按以下顺序考虑单元格的每一边:左-上-右-下,如果有墙则设置为“1”,如果没有墙则设置为“0”。您需要计算城堡中由墙壁隔开的房间数量(图中为 5 个房间)。 enter image description here enter image description here
【问题讨论】:
给出城堡的平面图,用字符串类型的二进制矩阵表示: 每个二进制代码都属于一个特定的单元格。一个单元格有四个边,因此我们按以下顺序考虑单元格的每一边:左-上-右-下,如果有墙则设置为“1”,如果没有墙则设置为“0”。您需要计算城堡中由墙壁隔开的房间数量(图中为 5 个房间)。 enter image description here enter image description here
【问题讨论】:
您可以使用DFS 进行二维搜索。遍历每个单元格并在尚未访问过的情况下运行 DFS。每次增加访问单元格的计数。 count 的最后一个值是房间数。
如果网格有 N 行 M 列,则伪代码如下 -
memset(visited, 0, sizeof(visited))
count = 1
for i in N
for j in M
if visited[i][j] == 0
dfs(i, j, count++)
print count
【讨论】: