1260번: DFS와 BFS
첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사
www.acmicpc.net
dfs, 깊이 우선 탐색
재귀 또는 스택을 이용해서 구현
루트 노드에서부터 더 이상 내려갈 수 없을 때까지 내려가고, 다음 분기로 넘어가는 탐색 방법
bfs, 너비 우선 탐색
큐를 이용해서 구현
루트 노드에서부터 최대한 넓게 이동한 다음, 더 이상 갈 수 없을 때 아래로 이동
[알고리즘] 깊이 우선 탐색(DFS) 과 너비 우선 탐색(BFS) (tistory.com)
[알고리즘] 깊이 우선 탐색(DFS) 과 너비 우선 탐색(BFS)
[알고리즘] 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS) 그래프를 탐색하는 방법에는 크게 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)이 있습니다. 📌여기서 그래프란, 정점(node)과 그 정점을 연결하
devuna.tistory.com
백준 1260 DFS와 BFS c++ (tistory.com)
백준 1260 DFS와 BFS c++
문제 출처 : www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결
ongveloper.tistory.com
DFS와 BFS 구현을 해봤는데...
예제 1,3은 맞는데, 예제 2에서 BFS가 모두 탐색되지 않는다
출력이
3 1 2 5 4
3 1 4
이렇게 나온다
[문제의 코드]
#include <iostream>
#include <queue>
using namespace std;
int n, m, v;
int map[1001][1001]; //인접 행렬 그래프
int visited[1001]; //정점 방문 여부
queue<int> q;
void DFS(int v){
//현재 노드 방문
visited[v] = 1;
cout << v << " ";
//현재 노드와 인접한 노드를 큐에 넣음
for(int i=1; i<=n; i++ ){
if(map[v][i] == 1 && visited[i] == 0){
DFS(i);
}
}
}
void BFS(int v){
//시작 노드를 큐에 넣음음
q.push(v);
visited[v] = 1;
//시작 노드와 인접한 모든 노드를 큐애 넣음음
while(!q.empty()){
v = q.front();
q.pop();
cout << v << " ";
for(int i=1; i<=n; i++){
if(map[v][i]==1 && visited[i]==0)
q.push(i);
visited[i] = 1;
}
}
}
int main()
{
cin >> n >> m >> v;
for(int i = 1; i <= n; i++) {
visited[i] = 0;
}
//인접 행렬 그려주기
int a, b;
for(int i=0; i<m; i++){
cin >> a >> b;
map[a][b] = 1;
map[b][a] = 1;
}
DFS(v);
cout << "\n";
for(int i = 1; i <= n; i++) {
visited[i] = 0;
}
BFS(v);
return 0;
}
문제를 모르겠어서 코드를 찾아봤는데, 아직까지 틀린 부분을 찾지 못했다.
내 눈엔 코드가 똑같은데 두 결과값이 다르게 나온다.
분명 단순한 문제일 것 같은데 빨리 해결하고 이 글을 끝맺을 수 있길,,
[내 코드]
void BFS(int v){
//시작 노드를 큐에 넣음음
q.push(v);
visited[v] = 1;
//시작 노드와 인접한 모든 노드를 큐애 넣음음
while(!q.empty()){
v = q.front();
q.pop();
cout << v << " ";
for(int i=1; i<=n; i++){
if(map[v][i]==1 && visited[i]==0)
q.push(i);
visited[i] = 1;
}
}
}
[맞는 코드]
void bfs(int v) {
visited[v] = 1;
q.push(v);
while (!q.empty()) {
v = q.front();
q.pop();
cout << v << " ";
for (int i = 1; i <= n; i++) {
if (map[v][i] && !visited[i]) {
q.push(i);
visited[i] = 1;
}
}
}
}
'‡ CODING TEST STUDY ‡ > º 백준' 카테고리의 다른 글
[백준 10451번 C++] 순열 사이클 (0) | 2023.11.11 |
---|---|
[백준 11724번 C++] 연결 요소의 개수 (0) | 2023.11.09 |
[백준 2225번 C++] 합분해 (0) | 2023.10.21 |
[백준 11058번 C++] 크리보드 (0) | 2023.10.20 |
[백준 2156번 C++] 포도주 시식 (0) | 2023.10.15 |