BOJ/DFS&BFS

백준 1260번 : DFS와 BFS

show2888 2019. 9. 16. 22:51
반응형

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

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.

www.acmicpc.net

#include <iostream>
#include <queue>
#include <cstring>

using namespace std;

const int MAX = 1001;
int N, M, V; //정점의갯수 , 간선의갯수 , 시작
int adj[MAX][MAX] = {
    0,
};
bool flag[MAX];
queue<int> q;

void DFS(int in)
{
    cout << in << " ";
    
    flag[in] = true;

    for (int i = 0; i <= N; i++) // 모든 배열을 전부 찾아야함(i<=N)
    {
        if (adj[in][i] == 1 && !flag[i])
        {
            
            DFS(i);
        }
    }
}

void BFS(int in)
{
    q.push(in);

    flag[in] = true;

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

        cout << temp << " ";

        for(int i =0 ;i<=N; i++)
        {
            if(adj[temp][i] == 1 && !flag[i])
            {
                q.push(i);
                flag[i] = true;
            }
        }        
    }

}

int main()
{
    cin >> N >> M >> V;
    int s, e;
    
    for (int i = 0; i < M; i++)
    {
        cin >> s >> e;
        adj[s][e] = 1;
        adj[e][s] = 1;
    }

    DFS(V);
    cout << endl;

    memset(flag, false, sizeof(flag)); 
    //어떤 메모리의 시작점부터 연속된 범위를 어떤 값으로(바이트 단위) 모두 지정하고 싶을 때 사용하는 함수이다.

    
    BFS(V);
    cout << endl;
}
반응형