본문 바로가기
코딩테스트_백준풀이

DFS와 BFS #1260 c++ 풀이

by wanna_dev 2023. 10. 24.

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

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

DFS, BFS 의 가장 기본적인 문제라고 생각한다. 

dfs는 재귀, bfs는 queue로 구현하였다.

#include<iostream>
#include<vector>
#include<cstring>
#include <queue>
using namespace std;



int Graph[1001][1001];
int Visited[1001];
int N, M, V;

void dfs(int node) {

	if (Visited[node] == 1) return;
	
	Visited[node] = 1;
	cout << node << " ";
	for (int i = 0; i <= N; i++) {
		if (Graph[node][i] == 1 && Visited[i] == 0)
			dfs(i);
	}

	

}
void bfs(int node) {
	queue <int> q;

	q.push(node);
	
	while (!q.empty()) {
		int cur  = q.front();
		
		q.pop();
		
		if (Visited[cur] == 1)continue;
		cout << cur << " ";
		Visited[cur] = 1;

		for (int i = 0; i <= N; i++) {
			if (Graph[cur][i] == 1 && Visited[i] == 0)
				q.push(i);
		}
	}
	

}
int main() {

	cin >> N >> M >> V;

	for (int i = 0; i < M; i++) {
		int u, v;
		cin >> u >> v;
		Graph[v][u] = Graph[u][v] = 1;

	}
	dfs(V);
	cout << endl;
	memset(Visited, 0, sizeof(Visited));
	bfs(V);
	return 0;
}

'코딩테스트_백준풀이' 카테고리의 다른 글

숨바꼭질 #1697 c++ 풀이  (0) 2023.10.26
리모컨 #1107 c++ 풀이  (0) 2023.10.24
유기농 배추 #1012 c++ 풀이  (0) 2023.10.24
Z #1074 c++ 풀이  (0) 2023.10.23
피보나치 함수 #1003 c++ 풀이  (1) 2023.10.23