Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <queue>
- #include <utility>
- #include <vector>
- using namespace std;
- const vector<int> dx = {0, 0, 1, -1};
- const vector<int> dy = {1, -1, 0, 0};
- // const vector<int> dx = {0, 0, 1, -1, 1, 1, -1, -1};
- // const vector<int> dy = {1, -1, 0, 0, 1, -1, 1, -1};
- bool is_in_bounds(int x, int y, int N, int M) {
- return x >= 0 && x < N && y >= 0 && y < M;
- }
- void dfs(int x, int y, int N, int M, vector<vector<int>> &grid,
- vector<vector<bool>> &vis) {
- if (vis[x][y]) {
- return;
- }
- vis[x][y] = true;
- for (int i = 0; i < 4; i++) {
- int nx = x + dx[i], ny = y + dy[i];
- if (is_in_bounds(nx, ny, N, M) && !vis[nx][ny] && grid[nx][ny] == 1) {
- dfs(nx, ny, N, M, grid, vis);
- }
- }
- }
- void bfs(int u, int v, int N, int M, vector<vector<int>> &grid,
- vector<vector<bool>> &vis) {
- queue<pair<int, int>> Q;
- Q.push(make_pair(u, v));
- while(!Q.empty()) {
- pair<int, int> nd = Q.front();
- Q.pop();
- int x = nd.first, y = nd.second;
- vis[x][y] = true;
- for (int i = 0; i < 4; i++) {
- int nx = x + dx[i], ny = y + dy[i];
- if (is_in_bounds(nx, ny, N, M) && !vis[nx][ny] && grid[nx][ny] == 1) {
- vis[nx][ny] = true; // IMPORTANT FOR BFS
- Q.push(make_pair(nx, ny));
- }
- }
- }
- }
- int main() {
- int N, M; // N x M grid of 0/1
- cin >> N >> M;
- vector<vector<int>> grid(N, vector<int>(M, 0));
- vector<vector<bool>> vis(N, vector<bool>(M, false));
- for (int i = 0; i < N; i++) {
- for (int j = 0; j < M; j++) {
- cin >> grid[i][j];
- }
- }
- int island_count = 0;
- for (int i = 0; i < N; i++) {
- for (int j = 0; j < M; j++) {
- if (!vis[i][j] && grid[i][j] == 1) {
- island_count++;
- dfs(i, j, N, M, grid, vis);
- }
- }
- }
- cout << "Island Count: " << island_count << endl;
- int island_count_bfs = 0;
- for (int i = 0; i < N; i++) {
- for (int j = 0; j < M; j++) {
- if (!vis[i][j] && grid[i][j] == 1) {
- island_count_bfs++;
- bfs(i, j, N, M, grid, vis);
- }
- }
- }
- cout << "Island Count BFS: " << island_count << endl;
- }
- /*
- 4 9
- 0 0 1 0 0 1 1 1 0
- 0 1 1 1 1 0 1 1 0
- 0 0 1 1 0 0 1 0 0
- 0 0 0 0 0 0 0 0 0
- * */
Advertisement
Add Comment
Please, Sign In to add comment