모든 하위 집합 나열-------2013년 1월 3일

6146 단어 열거하다
문제 설명: 빈 집합을 포함한 집합의 모든 하위 집합을 열거합니다.
나의 사고방식: 거슬러 올라가는 방법의 한 가지 사고방식은 하나의 자집나무를 생성하는 것이다. 하나의 집합 중의 원소는 자집중에 존재하거나 존재하지 않기 때문에 이것은 또 두 갈래 나무로 특수화되었다.두 갈래 나무의 밑에 도착할 때마다 한 번 인쇄한다.다음과 같은 코드를 쉽게 작성할 수 있습니다.
 1 #include <stdio.h>

 2 #define MAX 1000

 3 

 4 int n=3;  //the number of the set elements

 5 int set[MAX]={1,2,3};

 6 int count=0;//the number of the subset.

 7 

 8 void DFS(int level);

 9 void print_set();

10 

11 int main()

12 {

13     DFS(0);

14     return 0;

15 }

16 

17 void DFS(int level)

18 {

19     if(level==n)

20     {

21         print_set();

22         return ;

23     }

24     int save=set[level];

25     set[level]=0;

26     int index=0;

27     for(index=0;index<2;index++)

28     {

29         DFS(level+1);

30         set[level]=save;

31     }

32 

33 }

34 

35 void print_set()

36 {

37     int index;

38     count++;

39     printf("%d: {",count);

40     for(index=0;index<n;index++)

41     {

42         if(set[index]!=0) 

43             printf("%d ",set[index]);

44     }

45     printf("}
"); 46 }

만약 당신이 나의 문장이 당신에게 도움이 된다고 생각한다면, 추천해 주십시오. 매우 감사합니다!

좋은 웹페이지 즐겨찾기