티스토리 뷰

반응형

https://www.acmicpc.net/problem/2606

 

2606번: 바이러스

첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어

www.acmicpc.net

 


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 그래프 이론
  • 그래프 탐색
  • 너비 우선 탐색
  • 깊이 우선 탐색

 


 

⊙ 문제 접근 과정

 

BFS를 사용하여 1과 연결된 모든 컴퓨터에 대해서 count를 올려주었다.

 


 

⊙ 문제 풀이

 

#include <iostream>
#include <queue>

using namespace std;
#define MAX 101

int n,m;
int cnt=0;
int arr[MAX][MAX];
bool visited[MAX]={0,};
queue<int> q;

void bfs(int v) {
    q.push(v);
    visited[v]=true;

    while(!q.empty()) {
        v = q.front();
        q.pop();

        for(auto i=1;i<=n;i++) {
            if(arr[v][i]==1 && visited[i]==0) {
                q.push(i);
                visited[i]=true;
                cnt++;
            }
        }
    }
}

int main() {
    cin >> n >> m;

    for(auto i=0;i<m;i++) {
        int x,y;
        cin >> x >> y;
        arr[x][y]=1;
        arr[y][x]=1;
    }

    bfs(1);

    cout << cnt;
}

⊙ 결과

 


⊙ 마무리

 

 

BFS에서 가장 쉬운 문제라고 생각한다

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함