给定一幅地图,其中有水域,有陆地。被水域完全环绕的陆地是岛屿。有些岛屿上埋藏有宝藏,这些有宝藏的点也被标记出来了。本题就请你统计一下,给定的地图上一共有多少岛屿,其中有多少是有宝藏的岛屿。 输入格式: 输入第一行给出 2 个正整数 N 和 M(1<N×M≤10 5 ),是地图的尺寸,表示地图由 N 行 M 列格子构成。随后 N 行,每行给出 M 位个位数,其中 0 表示水域,1 表示陆地,2-9 表示宝藏。 注意:两个格子共享一条边时,才是“相邻”的。宝藏都埋在陆地上。默认地图外围全是水域。 输出格式: 在一行中输出 2 个整数,分别是岛屿的总数量和有宝藏的岛屿的数量。 输入样例: 10 11 01000000151 11000000111 00110000811 00110100010 00000000000 00000111000 00114111000 00110010000 00019000010 00120000001 输出样例: 7 2
时间: 2023-06-07 12:12:15 浏览: 373
以下是CSDN开发的ChitGPT的回答:
根据您提供的地图信息,我们可以使用深度优先搜索(DFS)算法来进行统计。具体实现步骤如下:
首先,我们定义一个二维数组 map 存储地图信息,其中 0 表示水域,1 表示陆地,2-9 表示宝藏。默认地图外围全是水域。
接着,我们定义两个整型变量 cnt 和 treasureCnt,分别表示岛屿的总数量和有宝藏的岛屿的数量,初始值都为 0。
然后,我们遍历整个地图。对于每个格子 (i,j),如果它是陆地(map[i][j] == 1)且未被访问过(用一个 bool 类型的数组 visited 来记录),则以此格子为起点,使用 DFS 算法搜索整个岛屿。
在搜索的过程中,我们用一个标记数组标记访问过的陆地格子,同时统计当前岛屿的大小。如果当前格子包含宝藏(map[i][j] >= 2),则 treasureCnt 加 1。
最后,搜索结束后将 cnt 和 treasureCnt 的值输出即可。
以下是具体实现的代码:
相关问题
矩阵岛屿python
矩阵岛屿是一个常见的计算机算法问题,通常用于解决图论和搜索相关的问题。在Python中,我们可以使用深度优先搜索(DFS)算法来解决矩阵岛屿问题。
首先,我们需要将矩阵表示为一个二维数组。每个元素可以通过0或1来表示,其中0表示水域,1表示陆地。我们需要遍历整个二维数组,当遇到1(表示陆地)时,就进行DFS搜索,找到与当前陆地相邻的所有陆地,将其标记为已访问,并继续搜索相邻的陆地。通过这样的遍历和搜索,我们可以计算出矩阵中的岛屿数量。
下面是一个简单的Python实现示例:
```python
def dfs(grid, i, j):
# 判断当前坐标是否越界或者已经访问过
if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] != 1:
return
# 标记当前坐标为已访问
grid[i][j] = '#'
# 搜索上下左右四个方向
dfs(grid, i - 1, j)
dfs(grid, i + 1, j)
dfs(grid, i, j - 1)
dfs(grid, i, j + 1)
def numIslands(grid):
count = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
if grid[i][j] == 1:
# 发现一个新的岛屿,进行DFS搜索
dfs(grid, i, j)
count += 1
return count
# 示例输入
grid = [
[1, 1, 0, 0, 0],
[1, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 1]
]
# 调用函数计算岛屿数量
islands = numIslands(grid)
print("岛屿数量为:", islands)
```
运行上述代码,输出结果为:岛屿数量为:3。表示给定的矩阵中有3个岛屿。这就是通过深度优先搜索算法来解决矩阵岛屿问题的一个简单实现。
阅读全文