깊이/너비 우선 탐색 문제
코딩테스트 연습 - 네트워크 | 프로그래머스
#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;
}