์ƒˆ์†Œ์‹

์•Œ๊ณ ๋ฆฌ์ฆ˜/BaekJoon

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

  • -
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'/*

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.