如何使用 C# 打印给定矩阵中的岛数?
线性扫描二维网格图,如果一个节点包含'1',那么它是触发深度优先搜索的根节点。在DFS期间,每个访问过的节点都应设置为“0”以标记为访问过的节点。计算触发DFS的根节点的数量,这个数字就是岛的数量,因为从某个根开始的每个DFS标识一个岛。
示例
using System;
namespace ConsoleApplication{
public class Matrix{
public int PrintNumberOfIslands(char[,] grid){
bool[,] visited = new bool[grid.GetLength(0), grid.GetLength(1)];
int res = 0;
for (int i = 0; i < grid.GetLength(0); i++){
for (int j = 0; j < grid.GetLength(1); j++){
if (grid[i, j] == '1' && !visited[i, j]){
DFS(grid, visited, i, j);
res++;
}
}
}
return res;
}
public void DFS(char[,] grid, bool[,] visited, int i, int j){
if (i < 0 || i >= grid.GetLength(0)) return;
if (j < 0 || j >= grid.GetLength(1)) return;
if (grid[i, j] != '1' || visited[i, j]) return;
visited[i, j] = true;
DFS(grid, visited, i + 1, j);
DFS(grid, visited, i - 1, j);
DFS(grid, visited, i, j + 1);
DFS(grid, visited, i, j - 1);
}
}
class Program{
static void Main(string[] args){
Matrix m = new Matrix();
char[,] mm = { { '1', '1', '1', '1', '0' }, { '1', '1', '0', '1', '0' }, { '1', '1', '0', '0', '0' }, { '0', '0', '0', '0', '1' } };
Console.WriteLine(m.PrintNumberOfIslands(mm));
}
}
}输出结果2
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下