15650 : N과 M (2)

서희찬·2021년 9월 14일
0

백준

목록 보기
27/105

문제

코드


#include <stdio.h>

int n,m;
int result[1000];
int check[1000];

void DFS(int depth,int cut)
{
    int i;
    
    if(depth==m)
    {
        for(int i=0;i<m;i++)
            printf("%d ",result[i]);
        printf("\n");
    }
    else
    {
        for(i=1;i<=n;i++)
        {
            if(check[i]==0&&cut<i)
            {
                result[depth]=i;
                check[i]=1;
                DFS(depth+1,i);
                check[i]=0;
            }
        }
    }
}

int main(void)
{
    scanf("%d %d",&n,&m);
    DFS(0,0);
    return 0;
}

해설

15649 문제는 중복되는 수까지 출력해주게 했는데 이는 DFS가 도는데 두번째 for문에서 i가 항상 1부터 시작하기 때문이다 !
왜냐하면 i =2일때 DFS(1)을 시작하면 (2,1)도 출력하게 되면 앞서 출력된 (1,2)와 겹치게 되는데 이때 cut이라는 변수를 넣어서 i가 1보다 클때 실행되게 만들면 되는것이다..!
거기에 check를 제외한 수도 출력하면된다..! 그럼 끗 ..!

profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)

0개의 댓글