[C++] BOJ 1260๋ฒˆ: DFS์™€ BFS

2022. 3. 11. 17:04ยท์•Œ๊ณ ๋ฆฌ์ฆ˜/BaekJoon
728x90

๋ฌธ์ œ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 1,000), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M(1 ≤ M ≤ 10,000), ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ V๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์–ด๋–ค ๋‘ ์ •์  ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ„์„ ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๊ฐ„์„ ์€ ์–‘๋ฐฉํ–ฅ์ด๋‹ค.

 

 

์ž…๋ ฅ

4 5 1
1 2
1 3
1 4
2 4
3 4

์ถœ๋ ฅ

1 2 4 3
1 2 3 4

 

์ฝ”๋“œ

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

// 1260๋ฒˆ DFS์™€ BFS

//๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰
void dfs(vector<int> inputGraph[], bool *visited,int index) {
	visited[index] = true;		//๋ฐฉ๋ฌธํ–ˆ์Œ์„ ํ‘œ์‹œ
	cout << index<<" ";
	//dfs ํƒ์ƒ‰ ์ˆœ์„œ
	int grphSize = inputGraph[index].size();
	for (int i = 0; i < grphSize; i++) {
		int connectIdx = inputGraph[index][i];
		if (!visited[connectIdx])
			dfs(inputGraph, visited, connectIdx);
	}
}

//๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰
void bfs(vector<int> inputGraph[],bool *visited,int index) {
	queue<int> que;
	que.push(index);
	visited[index] = true;
	//bfs ํƒ์ƒ‰ ์ˆœ์„œ
	while (!que.empty()) {
		int visitIdx = que.front();
		que.pop();
		cout << visitIdx<<" ";
		int grphSize = inputGraph[visitIdx].size();
		for (int i = 0; i < grphSize; i++) {
			//๋ฐฉ๋ฌธํ•œ Idx์™€ ์—ฐ๊ฒฐ๋œ ์›์†Œ๋“ค์„ que์— ๋„ฃ๊ธฐ
			int connectIdx = inputGraph[visitIdx][i];
			if (!visited[connectIdx]) {		//๋งŒ์•ฝ ์—ฐ๊ฒฐ๋œ ์›์†Œ๋ฅผ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
				que.push(connectIdx);		//๋ฐฉ๋ฌธํ•  ๋…ธ๋“œ๋กœ ์„ ์ •
				visited[connectIdx] = true;
			}
		}
	}
	
	
}

int main() {

	int N, M, V;		//์ •์ ์˜ ๊ฐœ์ˆ˜, ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜, ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ

	cin >> N >> M >> V;

	int size = N + 1;
	//N๊ฐœ๋งŒํผ์˜ ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ
	bool* visited = new bool[size] {false, };			//๋ฐฉ๋ฌธ ์œ ๋ฌด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด
	vector<int>* graph = new vector<int>[size];
	graph->push_back(1);

	for (int i = 0; i < M; i++) {
		int origin, connect;
		cin >> origin >> connect;
		graph[origin].push_back(connect);
		graph[connect].push_back(origin);
	}

	//์ •๋ ฌ
	for (int i = 0; i < size; i++) {
		sort(graph[i].begin(),graph[i].end());
	}

	dfs(graph,visited, V);
	cout << endl;
	visited = new bool[size]{ false, };		//๋ฐฉ๋ฌธ์œ ๋ฌด๋ฅผ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”ํ•ด์คŒ(์žฌ์‚ฌ์šฉ ์œ„ํ•ด)
	bfs(graph, visited,V);

	delete [] visited;		//๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ 
	//vector ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
	graph->clear();
	vector<int>().swap(*graph);

	return 0;
}

 

*๊ฐ„๋‹จํ•œ ํ•ด์„ค*

DFS์™€ BFS๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. DFS๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๋„๋ก ์ž‘์„ฑํ•˜์˜€๊ณ , BFS๋Š” ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด์„œ ํ•ด๋‹น ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋งŒ ๋‹ค์‹œ ํƒ์ƒ‰ํ•ด์„œ ํƒ์ƒ‰์ด ๋๋‚˜๋ฉด ์ข…๋ฃŒ๋˜๋„๋ก ์ž‘์„ฑํ•˜์˜€๋‹ค. DFS์™€ BFS์˜ ๊ฒฝ์šฐ 

https://better-tomorrow.tistory.com/entry/DFS-BFS-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

 

DFS & BFS ์ดํ•ดํ•˜๊ธฐ ๋ฐ ๊ตฌํ˜„(C++)

DFS : Depth First Search(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) - ๊ทธ๋ž˜ํ”„ ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜. (์™„๋ฒฝํžˆ ํƒ์ƒ‰) - ์‹œ์ž‘์ ๋ถ€ํ„ฐ ๋‹ค์Œ branch๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น branch๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๋ฐฉ๋ฒ•. - [์žฌ๊ท€ํ•จ์ˆ˜]

better-tomorrow.tistory.com

ํ•ด๋‹น ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ์ž์„ธํ•˜๊ฒŒ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ๋‹ค. DFS์™€ BFS์— ๋Œ€ํ•ด ์•Œ๊ณ ์‹ถ์œผ๋ฉด ์œ„์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ์ข‹์„๋“ฏํ•˜๋‹ค.

for (int i = 0; i < M; i++) {
    int origin, connect;
    cin >> origin >> connect;
    graph[origin].push_back(connect);
    graph[connect].push_back(origin);
}

์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ์ž…๋ ฅ๋ฐ›๋Š” ๊ณผ์ •์—์„œ ์—ฐ๊ฒฐ๋œ 2๊ฐœ๋ฅผ ์ž…๋ ฅ ๋ฐ›์„์‹œ ์„œ๋กœ ๊ฐ์ž์˜ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ž…๋ ฅ์‹œํ‚ค๋„๋ก ํ•œ๋‹ค.

//์ •๋ ฌ
for (int i = 0; i < size; i++) {
    sort(graph[i].begin(),graph[i].end());
}

์ž…๋ ฅ์‹œํ‚จ ์ •๋ณด๋“ค์„ sort๋ฅผ ํ†ตํ•ด ์ •๋ ฌ์„ ์‹œ์ผœ์ค€๋‹ค. ์ •๋ ฌ์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ์›ํ•˜๋Š”๋Œ€๋กœ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ ฌ์„ ๊ผญ ํ•ด์ค€๋‹ค.

 

 

 

*์ด ๋ฐฉ๋ฒ•๋งŒ์ด ๋งž๋Š” ์ •๋‹ต์€ ์•„๋‹™๋‹ˆ๋‹ค.

ํ›จ์”ฌ ์ข‹๊ณ  ๋น ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ํ•˜์‹œ๋Š” ๋ถ„๋“ค ํ™”์ดํŒ…! '0'/*

๋ฐ˜์‘ํ˜•

'์•Œ๊ณ ๋ฆฌ์ฆ˜ > BaekJoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C++] BOJ 3190๋ฒˆ: ๋ฑ€  (0) 2022.03.25
[C++] BOJ 2480๋ฒˆ: ์ฃผ์‚ฌ์œ„ ์„ธ๊ฐœ  (1) 2022.03.19
[C++] BOJ 10845๋ฒˆ: ํ  (0) 2022.01.18
BOJ 1157๋ฒˆ: ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜  (0) 2021.01.28
BOJ 2675๋ฒˆ : ๋ฌธ์ž์—ด ๋ฐ˜๋ณต  (0) 2021.01.28
'์•Œ๊ณ ๋ฆฌ์ฆ˜/BaekJoon' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [C++] BOJ 3190๋ฒˆ: ๋ฑ€
  • [C++] BOJ 2480๋ฒˆ: ์ฃผ์‚ฌ์œ„ ์„ธ๊ฐœ
  • [C++] BOJ 10845๋ฒˆ: ํ
  • BOJ 1157๋ฒˆ: ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜
KiTFOx
KiTFOx
  • KiTFOx
    KiTFOx's Notepad ๐Ÿ“
    KiTFOx
  • ๊ณต์ง€์‚ฌํ•ญ

    • ๐Ÿ“ข KiTFOx
  • 250x250
    • KiTFOx (118)
      • ๊ณต๋ถ€ (8)
        • Cใ†C++ (7)
        • Design Pattern (2)
        • Crowd Simulation (2)
        • LearnOpenGL ๋ฒˆ์—ญ (3)
        • OpenGL ์ž๋ฃŒ ๋ฒˆ์—ญ (2)
        • OpenGL (1)
        • UE ์ž๋ฃŒ ๋ฒˆ์—ญ (1)
        • AR (0)
        • OpenCV (0)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (50)
        • ์ž๋ฃŒ๊ตฌ์กฐ (3)
        • BaekJoon (35)
        • Programmers (11)
      • OpenGL ๋”ฐ๋ผ๊ฐ€๊ธฐ (2)
      • ๊ฒŒ์ž„์—”์ง„ (15)
        • Unity (13)
        • UE4 (0)
        • UE5 (2)
      • ๋ฉ”ํƒ€๋ฒ„์Šค (4)
        • Engage VR (3)
        • Altspace VR (1)
      • ํฌํŠธํด๋ฆฌ์˜ค ํ”„๋กœ์ ํŠธ (2)
        • NewRo (1)
        • Amaimon(Unity3D) (0)
        • ArenaSurvival(UE5) (0)
      • ๊ฐœ๋ฐœ์ผ์ง€ (1)
        • Pub-Simulator (1)
        • Project-B (0)
      • ๋„คํŠธ์›Œํฌ (4)
      • Etc Study (5)
      • ๋Œ€์™ธํ™œ๋™ (8)
        • ํฌ๋ž˜ํ”„ํ†ค ์ •๊ธ€ ๊ฒŒ์ž„๋žฉ (6)
      • ํšŒ๊ณ ๋ก (0)
      • ๊ฒŒ์ž„ ํ•œ๊ธ€ํŒจ์น˜ (0)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
KiTFOx
[C++] BOJ 1260๋ฒˆ: DFS์™€ BFS
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”