백준 1260 : DFS와 BFS
난이도 : 실버 2
시간 : 10분 소요
문제
https://www.acmicpc.net/problem/1260
1260번: DFS와 BFS
첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사
www.acmicpc.net

풀이 과정
이 문제는 큰 설명이 필요없다.
익히 알고 있는 dfs와 bfs를 사용하면 끝이다.
dfs와 bfs에 대해 잘 모른다면 간단히라도 꼭 먼저 공부하고 풀자
최종 코드
#include <iostream>
#include <vector>
#include <queue>
using namespace::std;
int n,m,v;
int visit1[1001];
int visit2[1001];
int b[1001][1001];
void bfs(int N){
queue<int> q;
visit2[N] = 1;
q.push(N);
while(!q.empty()){
int f = q.front();
q.pop();
printf("%d ", f);
for(int i=1; i<=1000; i++){
if(b[f][i] == 1){
if(visit2[i] == 0){
visit2[i] = 1;
q.push(i);
}
}
}
}
}
void dfs(int N){
visit1[N] = 1;
printf("%d ", N);
for(int i=1; i<=1000; i++){
if(b[N][i] == 1){
if(visit1[i] == 0){
visit1[i] = 1;
dfs(i);
}
}
}
}
int main(){
scanf("%d %d %d", &n, &m, &v);
for(int i=0; i<m; i++){
int tmp1, tmp2;
scanf("%d %d", &tmp1, &tmp2);
b[tmp1][tmp2] = 1;
b[tmp2][tmp1] = 1;
}
dfs(v);
printf("\n");
bfs(v);
}

실수를 해서 처음엔 틀렸다.
'PS' 카테고리의 다른 글
[C++] 백준 1012 - 유기농 배추 (0) | 2023.02.28 |
---|---|
[C++] 백준 1541 - 쉬운 최단거리 (0) | 2023.02.28 |
[C++] 백준 1541 - 잃어버린 괄호 (0) | 2023.02.24 |
[C++] 백준 2565 - 전깃줄 (0) | 2023.02.24 |
[C++] 백준 9020 - 골드바흐의 추측 (0) | 2023.02.24 |
댓글