티스토리 뷰
DFS와 BFS
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
5 초 | 128 MB | 24720 | 7751 | 4631 | 29.510% |
문제
그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다.
입력
첫째 줄에 정점의 개수 N(1≤N≤1,000), 간선의 개수 M(1≤M≤10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 한 간선이 여러 번 주어질 수도 있는데, 간선이 하나만 있는 것으로 생각하면 된다. 입력으로 주어지는 간선은 양방향이다.
출력
첫째 줄에 DFS를 수행한 결과를, 그 다음 줄에는 BFS를 수행한 결과를 출력한다. V부터 방문된 점을 순서대로 출력하면 된다.
<코드>
#define MAX 1001
#include <stdio.h>
int Graph[MAX][MAX] = { 0 };
int BFSvisit[MAX] = { 0 };
int DFSvisit[MAX] = { 0 };
int queue[MAX];
//DFS 구현
int DFS(int v, int N)
{
int i;
DFSvisit[v] = 1;
printf("%d ", v);
for (i = 1; i <= N; i++)
{
if (Graph[v][i] == 1 && DFSvisit[i] == 0)
{
DFS(i, N);
}
}
return 0;
}
//BFS구현!!
int BFS(int v, int N)
{
int front = 0, rear = 0;
int i, pop;
BFSvisit[v] = 1;
printf("%d ", v);
queue[0] = v;
rear++;
while (front < rear)
{
pop = queue[front];
front++;
for (i = 1; i <= N; i++)
{
if (Graph[pop][i] == 1 && BFSvisit[i] == 0)
{
printf("%d ", i);
queue[rear] = i;
rear++;
BFSvisit[i] = 1;
}
}
}
return 0;
}
int main()
{
int N, M, v;
int x, y;
scanf("%d%d%d", &N, &M, &v);
for (int i = 1; i <= M; i++)
{
scanf("%d%d", &x, &y);
Graph[x][y] = 1;
Graph[y][x] = 1;
}
DFS(v, N);
printf("\n");
BFS(v, N);
return 0;
}
'STUDY > 백준 문제' 카테고리의 다른 글
[백준알고리즘] 14500 테트로미노 (0) | 2017.10.21 |
---|---|
[백준알고리즘] 14503 로봇청소기 (0) | 2017.10.16 |
[백준알고리즘] 14502 연구소 (0) | 2017.10.15 |
[백준알고리즘]2468 안전영역 (0) | 2017.10.01 |
[백준알고리즘]1012 유기농 배추 (0) | 2017.10.01 |
- Total
- Today
- Yesterday
- atoi()
- 네트워크
- string
- 자료구조
- string변환
- 알고리즘개념
- kmp 알고리즘
- c언어
- 해싱 충돌
- LinkedList
- 연결리스트
- Algorithms
- 겨울방학
- 다이어리
- 컴퓨터네트워크
- 패턴 매칭
- string개념
- open address
- Tree
- stringint
- 시험준비
- string숫자
- int변환
- 트리
- 알고리즘
- 보이어-무어
- string int로 변환
- datastructures
- 계획
- DataStructure
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |