IT's 2 EG

백준 1260번 - DFS와 BFS 본문

알고리즘/백준 문제풀이

백준 1260번 - DFS와 BFS

엠씨비기 2020. 9. 4. 00:12

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 <cstdio>
#include <algorithm>
#include <queue>

using namespace std;

int n, m; // 정점, 간선
int v; // 탐색을 시작할 정점의 번호
int s, e; //시작점, 끝점
int matrix[1002][1002];
int visit[1002];
queue<int> Q;
int check[1002];
// DFS 함수
void dfs(int x)
{
    visit[x] = 1;
    printf("%d ", x);
    for (int i = 1; i <= n; i++)
    {
        if (matrix[x][i] == 1 && visit[i] == 0)
            dfs(i);
    }
}
// BFS 함수
void bfs(int x)
{
    check[x] = 1;
    Q.push(x);
    while (!Q.empty())
    {
        int t = Q.front();
        Q.pop();
        printf("%d ", t);
        for (int i = 1; i <= n; i++)
        {
            if (matrix[t][i] == 1 && check[i] == 0)
            {
                check[i] = 1;
                Q.push(i);
            }
        }
    }
}

int main(int argc, char *argv[])
{
    scanf("%d %d %d", &n, &m, &v);
    for (int i = 0; i < m; i++)
    {
        scanf("%d %d", &s, &e);
        matrix[s][e] = matrix[e][s] = 1;
    }
    dfs(v);
    printf("\n");
    bfs(v);
    printf("\n");

    return 0;
}

 

'알고리즘 > 백준 문제풀이' 카테고리의 다른 글

백준 1753번 - 최단경로  (0) 2021.01.20
백준 1697번 - 숨바꼭질  (0) 2020.09.07
백준 2178번 - 미로 탐색  (0) 2020.09.04
Comments