[νλ‘κ·Έλλ¨Έμ€/C++] λ€νΈμν¬ (DFS,BFS - L3)
https://school.programmers.co.kr/learn/courses/30/lessons/43162
νλ‘κ·Έλλ¨Έμ€
μ½λ μ€μ¬μ κ°λ°μ μ±μ©. μ€ν κΈ°λ°μ ν¬μ§μ λ§€μΉ. νλ‘κ·Έλλ¨Έμ€μ κ°λ°μ λ§μΆ€ν νλ‘νμ λ±λ‘νκ³ , λμ κΈ°μ κΆν©μ΄ μ λ§λ κΈ°μ λ€μ λ§€μΉ λ°μΌμΈμ.
programmers.co.kr
κ° λ Έλλ€μ΄ μ°κ²°λμ΄μλμ§λ₯Ό νμ νκ³ ν λ¬Άμμ λ€νΈμν¬λΌ μΉνλ€.
μ¬κΈ°μ λ€νΈμν¬κ° μ΄ λͺκ°μΈμ§? μΆλ ₯νλ λ¬Έμ .
BFSλ‘λ κ°λ₯νλ€. νμλ DFSλ‘ νμκ³ ,
κ° λ Έλ λ³λ‘ νμμ νλ, νλ² νμμ νλ κΈ°λ‘μ visitedμ μ μ₯ν΄μ λ μ΄μ νμνμ§ μλλ‘ νλ€.
μλλ©΄ λ¨ νλλΌλ μ°κ²°μ΄ λλ©΄ κ·Έ λ Έλλ λ€νΈμν¬μ μνκΈ° λλ¬Έμ΄λ€.
λͺ¨λ λ Έλμλ μ°κ²°λμ§ μμ λ Έλμ κ²½μ°λ λ Έλ νλλ§ μλ λ¨μΌ λ€νΈμν¬μ΄λ―λ‘ κ·Έ λΆλΆμ μΈλ μ²λ¦¬λ₯Ό μ§ννΈλ€.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
bool visited[201];
vector<int> connected[201];
int n;
void DFS(int idx){
//λ°©λ¬Έ μ²λ¦¬ μ§ν
if(visited[idx] == false) visited[idx] = true;
else return;
//μ°κ²°λ λ
Έλλ€μ νμΈ
for(int i = 0; i < connected[idx].size(); i++){
//μ°κ²°λμ΄ μμ κ²½μ°, νμ
DFS(connected[idx][i]);
}
}
int solution(int _n, vector<vector<int>> computers) {
// 1 <= n <= 200 μμ°μ
n = _n;
int answer = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(i == j) continue;
if(computers[i][j] == 1) connected[i].push_back(j);
}
}
//κ° λ
Έλλ³ νμμ μ§ννλ€
for(int i = 0; i < n ; i++){
//νλλ μ°κ²°λμ΄μμ§ μμ κ²½μ°, λ€νΈμν¬ νλλ‘ μ·¨κΈ
if(connected[i].size() == 0){
cout << "alone" << endl;
answer++;
continue;
}
//μ°κ²°λμ΄ μμ§λ§,
if(visited[i] == false) {
cout << "νμ" << endl;
DFS(i);
answer++;
}
}
return answer;
}
κ²°κ³Ό