Programming/Baekjoon

백준 1260 c++

fishersheep 2022. 1. 23. 16:42
반응형

백준: DFS와 BFS

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>

using namespace std;

void bfs(vector<int> gp[], bool vt[], int start)	//bfs 함수
{	
	queue<int>q;	//queue 선언

	q.push(start);	//q에 시작 정점을 push 한다

	while (!q.empty())	//q가 empty가 아니면 반복
	{	
		int temp = q.front();	//현재 q의 front를 temp에 저장
		q.pop();	//q의 front를 삭제

		if (vt[temp])	//visited 배열인덱스에 temp를 넣어서 방문한 값인지 확인, 방문했으면 밑에 코드 건너뛰기
			continue;

		vt[temp] = true;	//방문한것이 아니면 true로 방문한것을 저장
		cout << temp << " ";	//지금 방문했음으로 출력

		for (int i = 0; i < gp[temp].size(); i++)	//그래프[temp]의 사이즈 만큼 반복 (연결된 개수 만큼 반복)
		{
			q.push(gp[temp][i]);	//그래프[temp]의 0번인덱스(오름차순으로 main에서 정렬했기에 작은수) 부터 q로 push한다.
		}

	}
}

void dfs(vector<int> gp[], bool vt[], int start)	//dfs 함수
{
	vt[start] = true;	//visited 배열 인덱스에 매개변수로 받은 인덱스를 넣고 true를 저장
	cout << start << " ";	//방문하였음으로 출력

	for (int i = 0; i < gp[start].size(); i++)	//그래프[start] 사이즈 만큼반복, (연결된 개수 만큼 반복)
	{
		int temp = gp[start][i];	//그래프[start]의 0번인덱스의 값부터 temp에 저장

		if (vt[temp] == false)	//방문한적이 없다면
			dfs(gp, vt, temp);	//재귀함수로 방문을 한다.
	}

}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n, m, v;	//n은 정점의 개수, m은 간선의 개수, v는 시작정점의 번호
	int a, b;	//간선이 연결하는 두 정점
	cin >> n >> m >> v;	

	vector<int>* graph = new vector<int>[n + 1];	//n의개수+1 만큼 vector로 그래프 선언
	bool* visited = new bool[n + 1];	//방문을 확인할 visited 배열 선언
	
	fill(visited, visited + (n + 1), false);	//visited배열을 false로 초기화한다

	for (int i = 0; i < m; i++)	//간선의 연결을 입력받는 반복문
	{
		cin >> a >> b;
		graph[a].push_back(b);	
		graph[b].push_back(a);
	}

	for (int i = 0; i <= n; i++)	//그래프를 오름차순으로 정렬하는 반복문 
		sort(graph[i].begin(), graph[i].end());	//정점번호가 작은것을 먼저 방문해야하기 때문에

	dfs(graph, visited, v);	//dfs 탐색

	cout << '\n';
	fill(visited, visited + (n + 1), false);	//visited 배열 초기화

	bfs(graph, visited, v);	//bfs 탐색

	delete[] graph;
	delete[] visited;

	return 0;
}
반응형

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

백준 10989 c++ 주석포함  (0) 2022.01.24
백준 10825 c++ 주석포함  (0) 2022.01.23
백준 10814 c++  (0) 2022.01.22
백준 2495 c++  (0) 2022.01.21
백준 5524 c++  (0) 2022.01.21