การสแกนเชิงเส้นในแผนที่กริด 2 มิติ หากโหนดมี '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