[BOJ] Solved.ac Class3 2606 바이러스 C++

반응형
반응형

#INFO

#SOLVE

인접리스트 방식을 사용한 재귀 DFS 알고리즘을 사용해 풀이했다.

main 함수에서 nodeList에 정점 (컴퓨터 정보) 과 연결된 간선 정보를 입력한다. 

또한 문제의 요구사항은 1번 컴퓨터와 연결된 컴퓨터 노드의 수 이기에, 1번 컴퓨터만 DFS 로직을 실행한다. 

int main()
{
    // Input Logic
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> computer_num >> computer_line;
    for (int i = 0; i < computer_line; i++) {
        cin >> node1 >> node2;
        nodeList[node1].push_back(node2);
        nodeList[node2].push_back(node1);
    }
    // Recursive DFS Logic
        recursive_dfs(1);
    ...
}

 

재귀를 사용한 DFS 로직이다. 

1번 컴퓨터와 연결된 노드를 루프를 돌며 연결된 컴퓨터를 모두 카운팅한다.

void recursive_dfs(int cur) {
    cnt++;
    isVisited[cur] = true;
    for (int i : nodeList[cur]) {
        if (!isVisited[i]) {
            recursive_dfs(i);
        }
    }
}

 

그래프 탐색 관련 알고리즘에 대한 지식이 있다면 어렵지 않게 풀이할 수 있었던 문제였다고 생각한다.

#CODE

C++ 

 

반응형

댓글

Designed by JB FACTORY