[프로그래머스] c/c++ 네트워크 level.3 본문

알고리즘_프로그래머스/기타 문제

[프로그래머스] c/c++ 네트워크 level.3

giron 2021. 8. 4. 14:02
728x90

bfs를 이용해서 구현을 했다. level 3 치고는 단순한 bfs/dfs문제여서 당황한 느낌..? 

아직 방문하지 않았다면 bfs돌면서 방문을 체크해주고, bfs가 끝나면 다시 방문 안 한 구간부터 찾아서 반복해주면 되었다.

#include <string>
#include <vector>
#include <queue>
#include <iostream>

using namespace std;

int visited[201];
queue<int> q;
vector<int> v[201];

void bfs(int x, int n){
    visited[x]=1;
    q.push(x);
    while(!q.empty()){
        int cx = q.front();
        q.pop();
        for(int i=0; i<v[cx].size(); ++i){
            int nx = v[cx][i];
    
            if(!visited[nx]){
                visited[nx]=1;
                q.push(nx);
            }
        }
        
    }
    
}

int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    for(int i=0;i<computers.size(); ++i){
        for(int j=0;j<computers[i].size(); ++j){
            if(computers[i][j]){
                v[i].push_back(j);
                v[j].push_back(i);            
            }
        }
    }
    
    for(int i=0;i<computers.size(); ++i){
        for(int j=0;j<computers[i].size(); ++j){
            if(!visited[i] && computers[i][j]){
                bfs(i,n);
                answer++;
            }
        }
    }
    
    
    return answer;
}
728x90
Comments