본문 바로가기
Algorithm

[백준 1260] DFS와 BFS

by YEON-DU 2020. 1. 16.
반응형

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

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다.

www.acmicpc.net

#include <iostream>
#include <queue>

using namespace std;

int N, M, V;
int A, B;
int **graph;
bool *visited;

void dfs(int v)
{
	cout << v << " ";
	visited[v] = true;

	for (int i = 1; i <= N; i++)
	{
		if (graph[v][i] == 1 && !visited[i])
			dfs(i);
	}
}

void bfs(int v)
{
	queue <int> que;
	que.push(v);
	visited[v] = true;

	while (!que.empty())
	{
		int front = que.front();
		que.pop();
		cout << front << " ";

		for (int i = 1; i <= N; i++)
		{
			if (graph[front][i] == 1 && !visited[i])
			{
				visited[i] = true;
				que.push(i);
			}
		}
	}
}

int main()
{
	cin >> N >> M >> V;
	graph = new int*[N + 1];
	visited = new bool[N + 1];

	for (int i = 0; i < N + 1; i++)
		graph[i] = new int[N + 1];

	for (int x = 0; x < N + 1; x++)
		for (int y = 0; y < N + 1; y++)
			graph[x][y] = 0;

	for (int i = 0; i < M; i++)
	{
		cin >> A >> B;
		graph[A][B] = 1;
		graph[B][A] = 1;
	}

	for (int i = 0; i < N + 1; i++)
		visited[i] = false;

	dfs(V);
	cout << endl;

	for (int i = 0; i < N + 1; i++)
		visited[i] = false;
	bfs(V);

	
	return 0;
}
반응형

'Algorithm' 카테고리의 다른 글

[백준 1756] 피자 굽기  (0) 2020.01.19
[백준 10709] 기상캐스터  (0) 2020.01.19
[백준 2823] 유턴 싫어  (0) 2020.01.19
[백준 1008] A/B  (0) 2020.01.17
C++ 정리  (0) 2020.01.14

댓글