https://www.acmicpc.net/problem/11724
<코드>
이 문제는 dfs, bfs의 기본 문제이다.
#include <iostream>
#include <cstring>
#include <queue>
#include <vector>
#include <string>
#define max 1001
int board[max][max];
bool visited[max] = {0};
int cnt=0;
int n,m;
using namespace std;
//void dfs(int node)
//{
// visited[node] = true;
// for(int i=1;i<=n;i++)
// if(!visited[i] && board[node][i]){
// dfs(i);
// }
//}
void bfs(int node)
{
queue<int>q;
visited[node] = true;
q.push(node);
while(!q.empty())
{
int cur = q.front();
q.pop();
for(int i=1;i<=n;i++)
{
if(!visited[i] && board[cur][i]==1)
{
visited[i] = true;
q.push(i);
}
}
}
}
int main()
{
memset(board,0,sizeof(board));
int u,v;
cin>>n>>m;
for(int i=0;i<m;i++)
{
cin>>u>>v;
board[u][v] = board[v][u] = 1;
}
for(int i=1;i<=n;i++){
if(!visited[i]){
cnt++;
//dfs(i);
bfs(i);
}
}
cout<<cnt;
}
<풀이과정>
방문여부가 false이고 간선이 존재하면 탐색을 진행하는 방향으로 알고리즘을 설계하였다.
dfs는 재귀적으로 해결하였고, bfs는 각 방문여부를 true로 바꿔주고 각 정점을 push하는 과정으로 해결하였다.
'PS > 깊이 우선 탐색, 너비 우선 탐색[DFS, BFS]' 카테고리의 다른 글
백준 1012 유기농 배추(c++) (0) | 2022.08.05 |
---|---|
백준 4963 섬의 개수(c++) (0) | 2022.08.04 |
백준 2606 바이러스(c++) (0) | 2022.08.03 |
백준 2178 미로 탐색(c++) (0) | 2022.08.03 |
BFS (0) | 2022.08.02 |