programmers DFS/BFS | 네트워크

아빠늑대·2022년 10월 21일
0

깊이/너비 우선 탐색 문제
코딩테스트 연습 - 네트워크 | 프로그래머스

#include <string>
#include <vector>

using namespace std;

void ft_recurse_seek(int num, int *array, vector<vector<int>> computers) {
    
    vector<vector<int>>::iterator master = computers.begin() + num;
    vector<int> slave = *master;
    vector<int>::iterator it = slave.begin();
    int num_of_one = 0;
    for (;it != slave.end(); it++) {
        if (*it == 1) {
            num_of_one++;
        }
    }
    if (num_of_one == 1) {
        array[num] = 1;
        return ;
    }
    else if (num_of_one >= 2) {
        array[num] = 1;
    }
    it = slave.begin();
    for (;it != slave.end(); it++) {
        int gap = it - slave.begin();
        if (*it == 1 && gap - num != 0 && array[gap] == -1) {
            ft_recurse_seek(gap, array, computers);
        }
    }
}

// 1이 1개라면, 1인 네트워크.
// 1이 2개라면, 다인 네트워크의 말단
// 1이 3개 이상이라면, 다인 네트워크의 연결부.
int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    
    int *array = new int[n];
    // array 초기화
    for (int i = 0; i < n; i++)
    {
        array[i] = -1;
    }

    // 모두 순회하면서, 네트워크를 마킹해보자.
    for (int i = 0; i < n; i++)
    {
        if (array[i] == -1) {
            ft_recurse_seek(i, array, computers);
            answer++;
        }
    }
    
    return answer;
}
profile
두괄식 게으른 완벽주의자

0개의 댓글