[백준] 1260 DFS와 BFS

leejihun·2022년 11월 21일
0

알고리즘

목록 보기
42/50

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

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

int iArr[1001][1001];
int visit[1001];
int N, M, V, To, From;
queue<int> q;

void dfs(int iNum)
{
	cout << iNum << " ";
	visit[iNum] = true;

	for (int i = 1; i <= N; i++)
	{
		if (iArr[iNum][i] == 1 && visit[i] == false)
		{
			dfs(i);
		}
		if (i == N)
			return;
	}

}
void bfs(int iNum)
{
	q.push(iNum);

	while (!q.empty())
	{
		//int iNext = q.front();
		iNum = q.front();
					
		visit[iNum] = 1;
		cout << iNum << " ";
		q.pop();


		for (int i = 1; i <= N; i++)
		{
			if (iArr[iNum][i] == 1 && visit[i] == false)
			{
				q.push(i);
				visit[i] = true;
			}
		}
	}

}


int main()
{

	cin >> N >> M >> V;

	for (int i = 0; i < M; i++)
	{
		cin >> To >> From;
		iArr[To][From] = 1;
		iArr[From][To] = 1;
	}

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

dfs는 재귀로 bfs는 큐로 풀었다.

  1. DFS
    방문기록에 넣어주고, 연결된 다른 요소들이 있는데 방문기록이 없을 경우 그 요소에 대해 DFS를 수행하고 이를 반복한다.(재귀)
  2. BFS
    방문기록에 넣어주고 큐를 생성한다. 큐에 현재노드를 push하고,
    큐의 맨 앞 노드를 복사한 다음에 큐에서 지워준다. 복사한 노드와 연결된 다른 노드들이 있을 것이다. 그럼 그 노드들을 큐에 넣어준다. 순서는 상관없다. 그리고 그 노드들도 방문기록에 남겨준다. 이것을 큐가 빌 때까지 반복한다.

-참고 https://velog.io/@matcha_/%EB%B0%B1%EC%A4%80-1260-DFS%EC%99%80-BFS-C-BFSDFS

profile
U+221E

0개의 댓글