데이터 구조 빠 른 회고 - 이 진 트 리 해 멱 부분 집합 문제
7377 단어 데이터 구조
다음 예 를 들 어 n 개의 요 소 를 포함 하 는 집합 을 구 합 니 다. 집합 A = {1, 2, 3}, {1, 2}, {1, 3}, {1}, {2, 3}, {2}, {3}, {}}; /{} 에 따 르 면 공 집합 은 집합 A 의 모든 요소 의 측면 에서 볼 때 두 가지 상태 만 있 습 니 다. 또는 멱 집합 에 속 하 는 요소 집합 또는 멱 집합 요소 집합 에 속 하지 않 으 면 멱 집합 을 구 하 는 과정 은 집합 A 중의 요 소 를 순서대로 '취', '사' 하 는 과정 으로 볼 수 있 고 이 진 트 리 로 과정 에서 멱 집합 의 변화 상 태 를 나 타 낼 수 있 습 니 다.문제 풀이 사고: 멱 집합 을 구 하 는 과정 은 집합 A 중의 요 소 를 순서대로 취하 거나 버 리 는 과정 으로 볼 수 있다.1. 적당 한 데이터 구 조 를 선택한다. 가설 은 선형 표 로 집합 을 나타 낸다.2. 나무 뿌리 결점 은 멱 집 원소 의 초기 상태 (공 집) 를 나타 내 고, 잎 결점 은 종결 상태 (멱 집의 원소) 를 나타 내 며, i 층 은 전 i - 1 원소 에 대해 취사선택 한 현재 상태 아래 코드 를 나타 낸다.
1 #include <iostream>
2 #include <list>
3
4 using namespace std; 5
6 //
7 void printSet(list<int> p) 8 { 9 size_t num = p.size(); 10 if(!num) 11 cout<<"
"; 12 else
13 { 14 list<int>::iterator pos = p.begin(); 15 for( ;pos!= p.end() ; pos++) 16 { 17 cout<<(*pos)<<"\t"; 18 } 19 cout<<"
"<<endl; 20 } 21 } 22
23 // n a 24 //a b a 25 // A i-1 26 // i ; i>n ,
27 void GetPowerSet(int i,list<int> a,list<int> &b) 28 { 29 int n = a.size(); 30 if(i >= n) 31 printSet(b); 32 else
33 { 34 list<int>::iterator it = a.begin(); 35 int j = 0; 36 while(j++ < i) 37 it++; 38 int tmp = *it; 39 b.push_back(tmp); 40 GetPowerSet(i+1,a,b); 41 b.pop_back(); 42 GetPowerSet(i+1,a,b); 43 } 44 } 45
46 int main(int argc,char* argv[]) 47 { 48 list<int> la,lb; 49 la.push_back(10); 50 la.push_back(3); 51
52 GetPowerSet(0,la,lb); 53 return 0; 54 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.