danbibibi
article thumbnail
Published 2022. 12. 2. 08:48
BOJ 1260번: DFS와 BFS 문제 풀이/백준

1. 문제

문제 바로가기> BOJ 1260번: DFS와 BFS

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

 

 

2. 풀이

DFS와 BFS를 구현할 수 있는지를 보는 간단한 문제이다. 주의해야할 점은 "정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문"하기 때문에 미리 연결되는 node를 정렬해 두어야한다는 것이다!

<cpp />
#include<iostream> #include<algorithm> #include<vector> #include<queue> #define MAX 1001 using namespace std; int N, M, V; bool visited[MAX]; vector<int> graph[MAX]; void input(){ cin >> N >> M >> V; int a, b; for(int i=0; i<M; i++){ cin >> a >> b; graph[a].push_back(b); graph[b].push_back(a); } // 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문 for(int i=1; i<=N; i++) sort(graph[i].begin(), graph[i].end()); } void dfs(int node){ visited[node] = true; cout << node << " "; for(int i=0; i<graph[node].size(); i++){ int next_node = graph[node][i]; if(visited[next_node]) continue; dfs(next_node); } } void bfs(){ for(int i=0; i<=N; i++) visited[i] = false; visited[V] = true; queue<int> q; q.push(V); while(!q.empty()){ int node = q.front(); cout << node << " "; q.pop(); for(int i=0; i<graph[node].size(); i++){ int next_node = graph[node][i]; if(visited[next_node]) continue; visited[next_node] = true; q.push(next_node); } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); input(); dfs(V); cout << "\n"; bfs(); }

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 9465번: 스티커  (0) 2022.12.03
BOJ 2178번: 미로 탐색  (1) 2022.12.02
BOJ 15591번: MooTube (Silver)  (1) 2022.12.02
BOJ 2579번: 계단 오르기  (0) 2022.11.30
BOJ 12865번: 평범한 배낭  (0) 2022.11.29
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로