티스토리 뷰

PS/BOJ

[11724번] 연결요소

mming_0213 2019. 10. 6. 14:39

- DFS

#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;

const int MAX = 1010;
vector<int> myGraph[MAX];
bool visited[MAX];

void dfs(int x)
{
	visited[x] = true;
	
	for(int i = 0; i < myGraph[x].size(); i++)
	{
		int y = myGraph[x][i];
		if(!visited[y])
		{
			dfs(y);
		}
	}
}

int main()
{
	int n,m;
	int cnt = 0;
	scanf("%d %d", &n, &m);
	
	for(int i = 0; i < m; i++)
	{
		int u,v;
		scanf("%d %d", &u, &v);
		myGraph[u].push_back(v);
		myGraph[v].push_back(u);
	}

	//시작점 1~n까지
	for(int i = 1; i <= n; i++)
	{
		if(!visited[i])
		{
			cnt++;
			dfs(i);
		}
	}

	printf("%d", cnt);

	return 0;
}

- BFS

#include <cstdio>
#include <queue>
#include <vector>
#include <iostream>
using namespace std;

const int MAX = 1010;
vector<int> myGraph[MAX];
bool check[MAX];

void bfs(int x)
{
	queue<int> Queue;
	Queue.push(x);
	check[x] = true;
	
	while(!Queue.empty())
	{
		int current = Queue.front();
		Queue.pop();

		for(int i = 0; i < myGraph[current].size(); i++)
		{
			int next = myGraph[current][i];
			if(!check[next])
			{
				check[next] = true;
				Queue.push(next);
			}
		}
	}
	
}

int main()
{
	int n,m;
	int cnt = 0;
	scanf("%d %d", &n, &m);

	for(int i = 0; i < m; i++)
	{
		int u, v;
		scanf("%d %d", &u, &v);
		myGraph[u].push_back(v);
		myGraph[v].push_back(u);
	}

	for(int i = 1; i <= n; i++)
	{
		if(!check[i])
		{
			cnt++;
			bfs(i);
		}
	}
	
	printf("%d", cnt);

	return 0;
}

'PS > BOJ' 카테고리의 다른 글

[2667번] 단지번호붙이기  (0) 2019.10.07
[1707번] 이분 그래프  (0) 2019.10.06
[1260번] DFS와 BFS  (0) 2019.10.05
[11650번/11651번] 좌표 정렬하기/좌표 정렬하기2  (0) 2019.09.29
[C++] STL vector  (0) 2019.09.25
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함