μμ΄ μ¬μ΄ν΄μ μμ ν μκΈ° μμ μΌλ‘ λ€μ λμμ¨λ€.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
3 | 2 | 7 | 8 | 1 | 4 | 5 | 6 |
μ£Όμ΄μ§ μμλ₯Ό 보면, indexλ§λ€ κ°μ΄ μ£Όμ΄μ§λλ°, κ° μΈλ±μ€μμ κ°μ λ°©ν₯μΌλ‘ κ°μ μ΄ μ‘΄μ¬νλ€.
μ΄κ²μΌλ‘ κ·Έλνμ μ°κ²°μ±μ λνλΌ μ μκ³ , 1 -> 3, 3 -> 7, 7 -> 5, 5 -> 1λ‘ 1λ‘ μμν΄μ 1λ‘ λ€μ λμμ€λ―λ‘ μμ΄ μ¬μ΄ν΄μ ν΄λΉνλ€.
2μ κ²½μ°μλ 2μμ μμν΄μ 2λ‘ λλλ―λ‘ νλμ μμ΄ μ¬μ΄ν΄μ΄λ€.
4 -> 8 -> 6 -> 4μ΄λ―λ‘ μ΄ κ²½μ°μλ νλμ μμ΄ μ¬μ΄ν΄λ‘, μ΄ ν μ€νΈμΌμ΄μ€μλ μ΄ 3κ°μ μμ΄ μ¬μ΄ν΄μ΄ μ‘΄μ¬νλ€.
λ°©ν₯ κ·Έλνμ΄κ³ , λͺ¨λ μ μ μ΄ μ°κ²°λμ΄ μμ§ μμΌλ―λ‘ λͺ¨λ μΈλ±μ€μ λν΄ λ°©λ¬Ένμ§ μμμΌλ©΄ BFSλ‘ λ°©λ¬Έν΄μ νμνλλ‘ νλ€.
μ΄λ―Έ λ°©λ¬Έ νκ³ , currentμ μΈμ ν next μ μ μ΄ μ΄κΈ° μ μ (start)μ λμΌνλ€λ©΄ μμ΄ μ¬μ΄ν΄μ ν΄λΉνλ―λ‘ countλ₯Ό μ¦κ°νκ³ λ¦¬ν΄νλ€.
#include <stdio.h>
#include <deque>
#include <queue>
using namespace std;
void BFS(int start, deque<int> *graph, int *visited, int *count){
queue<int> q;
visited[start] = true;
q.push(start);
printf("[+] %d visited\n", start);
while(!q.empty()){
int current = q.front();
q.pop();
for(int next: graph[current]){
if(visited[next] == false){
visited[next] = true;
q.push(next);
printf("[+] %d visited\n", next);
}
else if(visited[next] == true && next == start){
(*count)++; // μ΄λ―Έ λ°©λ¬Ένκ³ , μΈμ ν μ μ μ΄ μ²μ λ°©λ¬Έν μ μ μ΄λ©΄ μ¬μ΄ν΄μ΄λ―λ‘ μΉ΄μ΄ν
printf("[+] %d visited count: %d\n", next, *count);
return;
}
}
}
}
int main(){
int T;
scanf("%d", &T);
for(int i=0; i<T; i++){
int N, count=0;
scanf("%d", &N);
deque<int> graph[N+1];
int visited[N+1];
fill(visited, visited+N+1, false);
for(int j=1; j<=N; j++){
int num; scanf("%d", &num);
graph[j].push_back(num);
}
for(int j=1; j<=N; j++){
printf("graph[%d]: ", j);
for(int n: graph[j]) printf("%d ", n);
printf("\n");
}
for(int j=1; j<=N; j++){
if(visited[j] == false) BFS(j, graph, visited, &count);
}
printf("%d\n", count);
}
}
#include <bits/stdc++.h>
using namespace std;
void BFS(int start, deque<int> *graph, int *visited, int *count){
queue<int> q;
visited[start] = true;
q.push(start);
while(!q.empty()){
int current = q.front();
q.pop();
for(int next: graph[current]){
if(visited[next] == false){
visited[next] = true;
q.push(next);
}
else if(visited[next] == true && next == start){
(*count)++; // μ΄λ―Έ λ°©λ¬Ένκ³ , μΈμ ν μ μ μ΄ μ²μ λ°©λ¬Έν μ μ μ΄λ©΄ μ¬μ΄ν΄μ΄λ―λ‘ μΉ΄μ΄ν
return;
}
}
}
}
int main(){
int T;
scanf("%d", &T);
for(int i=0; i<T; i++){
int N, count=0;
scanf("%d", &N);
deque<int> graph[N+1];
int visited[N+1];
fill(visited, visited+N+1, false);
for(int j=1; j<=N; j++){
int num; scanf("%d", &num);
graph[j].push_back(num);
}
for(int j=1; j<=N; j++){
if(visited[j] == false) BFS(j, graph, visited, &count);
}
printf("%d\n", count);
}
}
[λ°±μ€(BOJ)] 9466λ²: ν νλ‘μ νΈ (DFS/BFS, C++) (0) | 2021.02.26 |
---|---|
[λ°±μ€(BOJ)] 2331λ²: λ°λ³΅μμ΄ (DFS/BFS, C++) (0) | 2021.02.26 |
[λ°±μ€(BOJ)] 1707λ²: μ΄λΆ κ·Έλν (DFS/BFS, C++) (0) | 2021.02.25 |
[λ°±μ€(BOJ)] 11724λ²: μ°κ²° μμμ κ°μ (DFS/BFS, C++) (0) | 2021.02.25 |
[λ°±μ€(BOJ)] 2225λ²: ν©λΆν΄ (Dynamic Programming, C++) (0) | 2021.02.23 |