알고리즘/자료구조

dfs로 순열, 조합 구하기

beomseok99 2022. 7. 12. 01:09
728x90

 

2022.02.08 아직까진 조금 어렵다.. 이해가 팍 안되는 느낌

2022.02.14 중복순열 추가

dfs로 순열 구하기

void dfs(int cnt) {
    if (cnt == m) {
        for (int i = 0; i < m; i++) {
            cout << arr[i] << " ";
        }
        cout << "\n";
        return;
    }

    for (int i = 1; i <= n; i++) {
        if (!visited[i]) {
            visited[i] = true;
            arr[cnt] = i;
            dfs(cnt + 1);
            visited[i] = false;
        }
    }
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> m;

    dfs(0);

    return 0;
}
 

dfs로 조합 구하기

void dfs(int num, int cnt)
{
    if (cnt == m)
    {
        for (int i = 0; i < m; i++)
            cout << arr[i] << ' ';
        cout << '\n';
        return;
    }
    for (int i = num; i <= n; i++)
    {
        if (!visited[i])
        {
            visited[i] = true;
            arr[cnt] = i;
            dfs(i + 1, cnt + 1);
            visited[i] = false;
        }
    }
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> m;

    dfs(1,0);

    return 0;
}
 

dfs로 중복조합 구하기

#include <iostream>

using namespace std;

int n, m;
int arr[9];
bool visited[9];

void dfs(int num, int cnt)
{
    if (cnt == m)
    {
        for (int i = 0; i < m; i++)
            cout << arr[i] << ' ';
        cout << '\n';
        return;
    }
    for (int i = num; i <= n; i++)
    {
        //if (!visited[i])
        {
            visited[i] = true;
            arr[cnt] = i;
            dfs(i, cnt+1);
            visited[i] = false;
        }
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> n >> m;
    dfs(1, 0);

    return 0;
}
 

dfs로 중복순열 구하기

void dfs(int cnt) {
    if (cnt == m) {
        for (int i = 0; i < m; i++) {
            cout << arr[i] << " ";
        }
        cout << "\n";
        return;
    }

    for (int i = 1; i <= n; i++) {

        arr[cnt] = i;
        dfs(cnt + 1);
  
    }
}
 

 

728x90