PS/깊이 우선 탐색, 너비 우선 탐색[DFS, BFS]

백준 5567 결혼식(c++)

SeungbeomKim 2022. 8. 16. 20:48
반응형

https://www.acmicpc.net/problem/5567

 

5567번: 결혼식

예제 1의 경우 2와 3은 상근이의 친구이다. 또, 3과 4는 친구이기 때문에, 4는 상근이의 친구의 친구이다. 5와 6은 친구도 아니고, 친구의 친구도 아니다. 따라서 2, 3, 4 3명의 친구를 결혼식에 초대

www.acmicpc.net

<코드>

#include <iostream>
using namespace std;
int board[501][501];
bool visited[501];
int cnt=0;
int n,m; // n => 정점의 최대 수 m=> 간선의 수 
void bfs(int node)
{
	for(int i=2;i<=n;i++)
	{
		if(board[1][i])
		{
			visited[i] = true;
			for(int j=2;j<=n;j++)
			{
				if(board[i][j]){
					visited[j] = true;
				}
			}
		}
	}
}
int main()
{
	
	cin>>n>>m;
	for(int i=0;i<m;i++)
	{
		int a,b; 
		cin>>a>>b;
		board[a][b] = board[b][a] = 1;
	}

	bfs(1);
	for(int i=2;i<=n;i++)
	{
		if(visited[i]) cnt++;
	}
	cout<<cnt<<'\n';
}

<문제 풀이>

우선적으로 상근이의 번호는 1번이다. 그래서 첫 번째로 1번 노드와 연관이 있는지 조사해야 된다.

그 부분이 board[1][i]이다.

그 이후 1번 노드를 제외한 노드(if문을 통해 이미 1번과 연관되있음을 확인했음)가 다른 노드와 연관 되어있는지 확인해주면 된다.  

<코드 참조>

https://jow1025.tistory.com/92

 

[백준 5567] 결혼식

문제출처: https://www.acmicpc.net/problem/5567 그래프구현문제입니다. 풀이 보기의 예제를 보면, 1과 연결되있는 노드중에서 그 노드와 연결되어있는 노드의 개수를 찾는 문제입니다. 사실 이것만 구현

jow1025.tistory.com

 

반응형