π‘Language/C++
[c++] DFS κΉμ΄ μ°μ νμ , μ¬κ·ν¨μ
soonybutter
2024. 4. 2. 03:41
728x90
DFS: Depth - First Search (κΉμ΄μ°μ νμ)
- νμ¬ μ§μ μμ μ ν΄λμ μ§μ κΉμ§ λ Έλλ₯Ό κΉκ² νμνλ λ°©μ
- μ€ν λλ μ¬κ·ν¨μλ‘ κ΅¬ννλ€.
μ¬κ·ν¨μ
- μκΈ° μμ μ κ³μν΄μ νΈμΆνλ€.
- μ΄κΈ°ν
- λλλ 쑰건 (ifλ¬Έ)
- κ°μ§(branch) / μ¬κ·μ‘°κ±΄
Q. μ¬κ·ν¨μ μμλ¬Έμ
μ«μ nμ μ λ ₯ λ°μΌμΈμ.
μ«μ nλΆν° 0κΉμ§ Count down νλ€κ°
λ€μ λμμ€λ μλ₯Ό μΆλ ₯ νμλ©΄ λ©λλ€.
ex) 4
4 3 2 1 0 1 2 3 4
ex ) 6
6 5 4 3 2 1 0 1 2 3 4 5 6
#include<iostream>
using namespace std;
void abc(int num)
{
cout << num << " ";
//μ’
λ£μ‘°κ±΄
if (num == 0)
{
return;
}
//μ¬κ·μ‘°κ±΄
abc(num - 1);
cout << num<< " ";
}
int main()
{
//μ΄κΈ°ν
int n;
cin >> n;
abc(n);
return 0;
}
μμ μ¬κ·ν¨μκ° μ¬μ©λ μ½λλ₯Ό μμλ‘ μ΄ν΄λ³΄λ©΄,
1. main ν¨μμμ μ¬κ·ν¨μμ μ΄κΈ°κ°μ λ£μ΄μ€λ€.
λ³΄ν΅ μ΄λκΉμ΄κΉμ§ κ° κ²μΈμ§ λνλ΄λ levμ΄ λ μ -> lev
νΉμ
μ²μ μΆλ ₯ν λμμ λ£μ. -> a
*λ λ€ λ£λ κ²½μ°λ μλ€.
2. μ¬κ·ν¨μ μμΌλ‘ λ€μ΄κ°μ.
- μ²μμ numμ΄ λ€μ΄μ¨λ€.
- μλ¨μ μλ cout μ€ννλ€.
- 'μ¬κ·μ‘°κ±΄'μ ν΄λΉλλ abc(num-1)μΌλ‘ κ°μ numμ΄ 0μ΄ λ λκΉμ§ κ³μν΄μ abc()ν¨μλ₯Ό νΈμΆνκ² λλ€.
- num==0μ΄λ©΄ returnμ¦ 'λλ €μ€λ€'.
- abc(num=0)μ΄λ €λ©΄ νλ¨μ num-1μ numμ 1μ΄μμ΄μΌν¨. μ΄λ°©μμΌλ‘ κ³μν΄μ λλμκ°λ€.
- λλμκ°λ©΄μ νλ¨μ coutμ μ€ννλ€.
μ¬κ·νΈμΆ μ ꡬ문: νΈμΆ μ μνλ¨.
μ¬κ·νΈμΆ μλ ꡬ문: 리ν΄ν΄μ λμμμ λ μνλ¨.
μ¬κ·ν¨μμ μ£Όμ¬μλ¬Έμ
Q.μμλ¬Έμ
μ£Όμ¬μ 3κ°λ₯Ό λλ Έμ λ λͺ¨λ ν©μ μΆλ ₯νμμ€.
(μ£Όμ¬μ: 1~6 (111,112,113,114...666)
#include<iostream>
using namespace std;
void dice(int lev,int sum)
{
if (lev == 3) //μ’
λ£μ‘°κ±΄
{
cout << sum;
return;
}
//μ¬κ·μ‘°κ±΄
for (int i = 1; i <= 6; i++)
{
//νμ¬ λ 벨μμμ sumμ κ°μ λ€ λ€λ₯΄λ€.
//κ°μ§μ κ°―μλ₯Ό forλ¬ΈμΌλ‘ ννν¨.
dice(lev + 1, sum + i);
}
}
int main()
{
dice(0, 0);
return 0;
}
- κ°μ§μ κ°―μλ₯Ό for λ¬ΈμΌλ‘ ννν¨.
ex) μ£Όμ¬μ λκΈμ΄ 6κ°μ¬μ forλ¬Έμ 6λ² λλ¦Ό. - i : κ°μ§, λκΈ
728x90