매일 조금씩

백준 1260번: DFS와 BFS 본문

알고리즘/Graph (DFS, BFS)

백준 1260번: DFS와 BFS

mezo 2020. 5. 1. 20:33
728x90
반응형

 

 

 

DFS와 BFS에 관한 개념문제라고 볼수 있다.

아래 포스팅을 보고 풀었다. 

https://jaimemin.tistory.com/561

 

백준 1260번 DFS와 BFS

문제 링크입니다: https://www.acmicpc.net/problem/1260 자료구조 시간에서 다루었던 BFS(Breadth First Search)와 DFS(Depth First Search)를 복습할 겸 풀어봤던 문제였습니다. 실제로 BFS와 DFS는 자주 다루어..

jaimemin.tistory.com

DFS는 재귀를 사용하여 풀었고 BFS는 큐를 사용하여 풀었다. 

 

 

#include <iostream>
#include <queue>
#include <cstring> //memset
using namespace std;

const int MAX = 1000 + 1;

int N, M, V;
int adjacent[MAX][MAX];	// 1이면 연결됨을 의미
bool visited[MAX];
queue<int> q;

// DFS 재귀
void DFS(int v) {
	cout << v << " ";
	
	for (int i = 1; i <= N; i++) {
		// 연결되어있고 방문하지 않은 노드일 때
		if (adjacent[v][i] && !visited[i]) {
			visited[i] = 1;
			DFS(i);
		}
	}
}

// BFS 큐
void BFS(int v)
{
	q.push(v);

	// 시작노드와 가까운 노드부터 차례대로 큐에 넣어짐
	while (!q.empty()) {
		v = q.front(); // 부모노드로 재정의
		q.pop();

		cout << v << " ";

		// 해당 노드에 인접한 노드들을 모두 큐에 넣음
		for (int i = 1; i <= N; i++) {
			if (adjacent[v][i] && !visited[i]) {
				visited[i] = 1;
				q.push(i);
			}
		}
	}
	
}

int main(void) {
	ios_base::sync_with_stdio(0);
	cin.tie(0);	//cin 실행속도 향상

	cin >> N >> M >> V;

	for (int i = 0; i < M; i++) {
		int from, to;
		cin >> from >> to;
		adjacent[from][to] = 1;
		adjacent[to][from] = 1;
	}

	visited[V] = 1;
	DFS(V);
	cout << endl;

	memset(visited, false, sizeof(visited));
	visited[V] = 1;
	BFS(V);
	cout << endl;
	
	
	return 0;
}
728x90
반응형

'알고리즘 > Graph (DFS, BFS)' 카테고리의 다른 글

백준 1012번 : 유기농 배추 [C++]  (0) 2020.08.08
백준 7576번 : 토마토  (0) 2020.08.07
백준 2667번 : 단지 번호 붙이기  (0) 2020.08.07
백준 2178번 : 미로탐색  (0) 2020.08.07
백준 2606번: 바이러스  (0) 2020.05.01