알고리즘/BOJ

백준 5567번 결혼식

꾸준함. 2018. 6. 22. 12:56

문제 링크입니다: https://www.acmicpc.net/problem/5567


DFS(Depth First Search)를 이용해서 1번의 친구와 친구의 친구를 구하는 문제였습니다.

주의할 점은 마지막에 친구를 셀 때 자기자신까지 세지 않도록 for문을 2번부터 시작해야한다는 점이였습니다!


#include <iostream>

#include <vector>

using namespace std;

 

const int MAX = 500 + 1;

 

vector<int> friends[MAX];

bool friendsList[MAX];

 

void findFriends(int nodeNum)

{

        //nodeNum의 친구 파악

        for (int i = 0; i < friends[nodeNum].size(); i++)

        {

                 int next = friends[nodeNum][i];

                 friendsList[next] = true;

        }

 

        //1번의 친구의 친구를 찾는다

        if(nodeNum==1)

                 for (int i = 0; i < friends[nodeNum].size(); i++)

                 {

                         int next = friends[nodeNum][i];

                         findFriends(next);

                 }

}

 

int main(void)

{

        int N, M;

        cin >> N >> M;

 

        for (int i = 0; i < M; i++)

        {

                 int a, b;

                 cin >> a >> b;

 

                 friends[a].push_back(b);

                 friends[b].push_back(a);

        }

 

        findFriends(1);

 

        int cnt = 0;

        //1번은 자기자신이므로 세지 않는다

        for (int i = 2; i <= N; i++)

                 if (friendsList[i])

                         cnt++;

 

        cout << cnt << endl;

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 2662번 기업투자  (2) 2018.06.22
백준 1783번 병든 나이트  (1) 2018.06.22
백준 1068번 트리  (0) 2018.06.22
백준 11404번 플로이드  (0) 2018.06.21
백준 2698번 인접한 비트의 개수  (0) 2018.06.21