[C++] 백준 1260 DFS와 BFS

2021. 3. 25. 15:25·Algorithm/Baekjoon
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>

using namespace std;

const int vertexMax = 1001;	//최대 노드 개수
vector<int> num[vertexMax];
bool visited[vertexMax]{false};	//방문한 노드

void DFS(int curr);
void BFS(int curr);

int main()
{
	ios::sync_with_stdio(false);

	int vertex, line, startNum;

	cin >> vertex >> line >> startNum;

	for (int i = 0; i < line; i++)
	{
		int temp[2];
		cin >> temp[0] >> temp[1];

		num[temp[0]].push_back(temp[1]);	//무방향 그래프로 넣어준다.
		num[temp[1]].push_back(temp[0]);
	}

	//문제에서 순서에 따라 값이 달라지기에 작은 번호를 더 먼저 검사하도록한다.
	for (int i = 0; i < vertex; i++)
		sort(num[i].begin(), num[i].end());	

	DFS(startNum);
	cout << "\n";
	memset(visited, false, sizeof(visited));	//사용한 visited의 방문했는가를 초기화해준다.
	BFS(startNum);
}

void DFS(int curr)
{
	visited[curr] = true;	//현재 노드 방문

	cout << curr << " ";

	for (int i = 0; i < num[curr].size(); i++)
	{
		if (visited[num[curr][i]] == true) continue;	//다음 노드가 간 곳이면 패스

		DFS(num[curr][i]);	//다음 노드가 안 간 곳이면 다음 노드를 방문한다.
	}
}

void BFS(int curr)
{
	queue<int> q;
	q.push(curr);	//처음 갈 곳을 넣어준다.
	visited[curr] = true;
	cout << curr << " ";

	while (!q.empty())	//간 곳이 없을 때까지 반복
	{
		int currNode = q.front();	//현재 단계의 노드 값
		q.pop();	//현재 단계를 빼준다.

		for (int i = 0; i < num[currNode].size(); i++)	//현재 단계에 있는 노드 값들을 반복
		{
			int nextNode = num[currNode][i];	//현재 단계에 붙은 노드

			if (visited[nextNode] == false)
			{
				cout << nextNode << " ";	//다음 노드를 방문한다.
				visited[nextNode] = true;
				q.push(nextNode);	//다음 단계에서 쓸 수있게 노드를 넣어준다.
			}
		}
	}
}

 

풀이

  1. DFS와 BFS를 이해하고 문제를 해결한다.
  2. vector를 사용하여 노드들을 저장했다면 작은 값이 뒤에 있을 수도 있으므로 정렬해준다.

 

 

BFS와 DFS에 관한 설명 및 예시 주소

BFS : chanheess.tistory.com/45?category=1177428

DFS : chanheess.tistory.com/25?category=1177428

저작자표시 (새창열림)

'Algorithm > Baekjoon' 카테고리의 다른 글

[C++] 백준 2606 바이러스 DFS, BFS  (0) 2021.03.29
[C++] 백준 1697 숨바꼭질 BFS  (0) 2021.03.26
[C++] 백준 2655 가장높은탑쌓기 DP  (0) 2021.03.23
[C++] 백준 1495 기타리스트 DP  (0) 2021.03.17
[C++] 백준 9251 LCS  (0) 2021.02.19
'Algorithm/Baekjoon' 카테고리의 다른 글
  • [C++] 백준 2606 바이러스 DFS, BFS
  • [C++] 백준 1697 숨바꼭질 BFS
  • [C++] 백준 2655 가장높은탑쌓기 DP
  • [C++] 백준 1495 기타리스트 DP
chanheess
chanheess
'왜' 그렇게 했는가?에 대한 생각으로 공부 및 작업의 저장관리
  • chanheess
    왜 그렇게 생각했는가?
    chanheess
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Backend Programming
      • Game Programming
        • Unreal
        • DirectX
      • C++
        • Memo
        • Basic
        • Effective Modern
      • Algorithm
        • Memo
        • Baekjoon
        • Programmers
        • HackerRank, LeetCode
      • Data Structure
      • Design Pattern
      • Etc
        • Memo
        • Daily Log
        • Book
  • 최근 글

  • 최근 댓글

  • 태그

    dfs
    dp
    JWT
    티스토리챌린지
    SpringSecurity
    알고리즘
    spring
    JPA
    프로그래머스
    Java
    오블완
    위클리 챌린지
    백준
    c++ 기초 플러스
  • hELLO· Designed By정상우.v4.10.0
chanheess
[C++] 백준 1260 DFS와 BFS
상단으로

티스토리툴바