Submission

Status:

[PPPPPPPPPPPPPPPPPPPPPPPPP]

Subtask/Task Score:

{100/100}

Score: 100

User: Few500

Problemset: เกาะที่ใหญ่ที่สุด

Language: cpp

Time: 0.003 second

Submitted On: 2026-03-21 14:52:29

#include<iostream>
#include<vector>
using namespace std;

int largest_island = 0, curr_island = 0;
int n, m;
vector<vector<int>> grid, visited;
int dx[] = {1,-1,0,0};
int dy[] = {0,0,-1,1};

void dfs(int x, int y){
    if(visited[x][y]) return;
    visited[x][y] = 1;
    curr_island++;
    largest_island = max(largest_island, curr_island);
    for(int i=0; i<4; i++){
        int nx = x + dx[i], ny = y + dy[i];
        if(nx >= 0 && nx < n && ny >= 0 && ny < m && !visited[nx][ny] && grid[nx][ny])
            dfs(nx, ny);
    }
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    cin >> n >> m;
    grid.resize(n, vector<int>(m));
    visited.assign(n, vector<int>(m, 0));
    for(int i=0; i<n; i++){
        string l;
        cin >> l;
        for(int j=0; j<m; j++)
            grid[i][j] = l[j] - '0';
    }

    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            if(visited[i][j] || grid[i][j] == 0) continue;
            curr_island = 0;
            dfs(i, j);
        }
    }

    cout << largest_island << '\n';
    return 0;
}