使用 DFS 尋找島嶼數 (C++)
在本題中,我們給定了一個 2D 二進位制矩陣。我們的任務是使用 DFS 找到島嶼數量。
島嶼是指矩陣中 1 或多個相連的 1。
讓我們舉個例子來理解該問題:
Input : bin[][] = {{ 1 0 0 0}
{0 1 0 1}
{0 0 0 0}
{0 0 1 0}}
Output : 3
Explanation
Islands are −bin00 - bin11
bin13
bin32
解題思路
要使用 DFS 來解決問題,我們將使用 DFS 技術探索矩陣中所有的相鄰位置(每個數字可能多達 8 個相鄰位置),並查詢 1。如果我們遇到一個未訪問過的值為 1,那麼我們將考慮它。我們將對已訪問的值進行檢查,以避免重複訪問。透過這樣做,我們可以計算矩陣中存在的島嶼數量。
示例
#include <bits/stdc++.h>
using namespace std;
#define ROW 5
#define COL 5
int canVisit(int bin[][COL], int row, int col, bool visited[][COL]){
return (row >= 0) && (row < ROW) && (col >= 0) && (col < COL) && (bin[row][col] && !visited[row][col]);
}
void DFS(int bin[][COL], int row, int col, bool visited[][COL]){
static int getNeighbourRow[] = { -1, -1, -1, 0, 0, 1, 1, 1 };
static int getNeighbourCol[] = { -1, 0, 1, -1, 1, -1, 0, 1 };
visited[row][col] = true;
for (int k = 0; k < 8; ++k)
if (canVisit(bin, row + getNeighbourRow[k], col + getNeighbourCol[k], visited))
DFS(bin, row + getNeighbourRow[k], col + getNeighbourCol[k], visited);
}
int findIslandCount(int bin[][COL]){
bool visited[ROW][COL];
memset(visited, 0, sizeof(visited));
int islandCount = 0;
for (int i = 0; i < ROW; ++i)
for (int j = 0; j < COL; ++j)
if (bin[i][j] && !visited[i][j]) {
DFS(bin, i, j, visited);
islandCount++;
}
return islandCount;
}
int main(){
int bin[][COL] = {{1, 0, 0, 0},
{0, 1, 0, 1},
{0, 0, 0, 0},
{0, 0, 1, 0}};
cout<<"The number of islands present in the matrix is "<<findIslandCount(bin);
return 0;
}輸出
The number of islands present in the matrix is 4
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP