티스토리 뷰

출처 : https://www.hackerrank.com/challenges/connected-cell-in-a-grid/problem


#include <bits/stdc++.h>

using namespace std;


bool visited[10][10];

int cnt, dy[] = {0,0,1,-1, 1, 1 , -1, -1}, dx[] = {1,-1,0,0,-1,1,1,-1};

inline bool check(int i, int j, int n, int m) { return (i >= 0 && j >= 0 && i < n && j < m) ? true : false; }


int dfs(int n, int m, int i, int j, int cnt, vector<vector<int>> v) {

    visited[i][j] = 1; cnt++;

    for (int d = 0; d < 8; d++) {

        int ni = i + dy[d], nj = j + dx[d];

        if (check(ni,nj,n,m) && v[ni][nj] && !visited[ni][nj]) cnt = dfs(n,m,ni, nj, cnt, v);

    }

    return cnt;

}


int connectedCell(vector<vector<int>> matrix) {

    int ans = 0, n = matrix.size(), m = matrix[0].size();

    memset(visited, 0, sizeof(visited));

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < m; j++) {

            if (matrix[i][j] && !visited[i][j]) {

                ans = max(ans, dfs(n,m,i, j, 0, matrix));

            }

        }

    }

    return ans;

}


int main()

{

    ofstream fout(getenv("OUTPUT_PATH"));


    int n;

    cin >> n;

    cin.ignore(numeric_limits<streamsize>::max(), '\n');


    int m;

    cin >> m;

    cin.ignore(numeric_limits<streamsize>::max(), '\n');


    vector<vector<int>> matrix(n);

    for (int i = 0; i < n; i++) {

        matrix[i].resize(m);


        for (int j = 0; j < m; j++) {

            cin >> matrix[i][j];

        }


        cin.ignore(numeric_limits<streamsize>::max(), '\n');

    }


    int result = connectedCell(matrix);


    fout << result << "\n";


    fout.close();


    return 0;

}



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함