https://www.acmicpc.net/problem/1260
<코드>
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#define max 1001
using namespace std;
int n,m;
int v;
int board[max][max];
bool visited[max] = {false};
void dfs(int node)
{
visited[node] = true;
cout<<node<<' ';
for(int next=1;next<=n;next++)
{
if(!visited[next] && board[node][next]){
dfs(next);
}
}
}
void bfs(int node)
{
visited[max] = {false};
queue<int>q;
visited[node] = true;
q.push(node);
while(!q.empty())
{
int cur = q.front();
q.pop();
cout<<cur<<' ';
for(int next=1;next<=n;next++)
{
if(!visited[next] && board[cur][next]){
visited[next] = true;
q.push(next);
}
}
}
}
int main()
{
cin>>n>>m>>v;
for(int i=0;i<m;i++)
{
int a,b;
cin>>a>>b;
board[a][b] = board[b][a] = 1;
}
dfs(v);
cout<<'\n';
memset(visited,0,sizeof(visited));
bfs(v);
}
<풀이과정>
dfs는 노드의 깊이가 점점 커지는 방향으로 탐색을 진행하므로 스택을 이용한 풀이(후입선출)
bfs는 방문한 노드에서 인접한 노드를 방문하는 방법으로 큐를 이용한 풀이(선입선출)를 적용시키면 이해하기 쉬울 것이다.
'PS > 깊이 우선 탐색, 너비 우선 탐색[DFS, BFS]' 카테고리의 다른 글
백준 7576 토마토(c++) (0) | 2022.08.14 |
---|---|
17086 아기 상어 2(c++) (0) | 2022.08.12 |
백준 14502 연구소(c++) (0) | 2022.08.09 |
백준 15686 치킨 배달(c++) (0) | 2022.08.09 |
백준 7562 나이트의 이동(c++) (0) | 2022.08.06 |