2d ग्रिड मैप को लीनियर स्कैन करें, यदि किसी नोड में '1' है, तो यह एक रूट नोड है जो डेप्थ फर्स्ट सर्च को ट्रिगर करता है। डीएफएस के दौरान, विज़िट किए गए नोड के रूप में चिह्नित करने के लिए प्रत्येक विज़िट किए गए नोड को '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