dfs 와 bfs

Lil Mazzi·2024년 5월 20일
0

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

#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include "string.h"

using namespace std;

int N, M, V;
int node[1001][1001];
int visited[1001];

void dfs(int vertex) {
	cout << vertex << " ";
	visited[vertex] = 1;

	for (int i = 1; i <= N; i++) {
		if(visited[i] ==0 && node[vertex][i]==1)	
			dfs(i);
	}
}

> void bfs(int vertex) {

	queue<int> q;

	q.push(vertex);
	visited[vertex] = 1;
	
	while (!q.empty()) {
		int front = q.front();
		q.pop();
		cout << front << " ";

		for (int i = 1; i <= N; i++) {
			if (visited[i] == 0 && node[front][i] == 1) {
				q.push(i);
				visited[i] = 1; 
			}
		}
	}
}

int main() {
	cin >> N >> M >> V;
	for (int i = 0; i < M; i++) {
		int from;
		int to;
		cin >> from >> to;
		node[from][to] = 1;
		node[to][from] = 1;
	}

	dfs(V);

	memset(visited, 0, sizeof(visited));
	cout << endl;

	bfs(V);
}

dfs
재귀가 중첩될수록 뇌디버깅 힘들어짐
bfs
큐에 넣는순간(탐색대상이 처리중상태로변경) visited 체크해줘야함.
while문 시작 전, 초항처리를 해줘야만 함

  • bfs와 dfs를 각각 써야만 되는 경우? > 모든 케이스가 dfs bfs로 풀리는걸까?
  • bfs와 dfs가 효율적인 경우? 문제의 어떤조건일 때?
  • 시간복잡도, 공간복잡도 , 탐색&조합의 경우 다른 복잡도?
profile
개발마법사 1차전직수련중

0개의 댓글