1. 程式人生 > >求{1,2,3}的子集————回溯法(遞迴與非遞迴)

求{1,2,3}的子集————回溯法(遞迴與非遞迴)

求ar[]={1,2,3}的子集序列,小夥伴們可以先自己嘗試解一下~~

#include<iostream>
using namespace std;
//用回溯法搜尋子集樹
void fun(int *ar,int *br,int n)//非遞迴
{
    int k = 0;
    br[k] = -1;
    while(k >= 0)
    {
        br[k]+=1;
        if(br[k] <= 1)
        {
            if(k == n)
            {
                for(int
i = 0;i<n;++i) { if(br[i]) { cout<<ar[i]<<" "; } } cout<<endl; --k; } else { k++; br[k] = -1
; } } else { --k; } } } void fun(int *ar,int *br,int i,int n)//遞迴 { if(i == n) { for(int j = 0;j<n;++j) { if(br[j]) { cout<<ar[j]<<" "; } } cout
<<endl; } else { br[i] = 1; fun(ar,br,i+1,n);// left; br[i] = 0; fun(ar,br,i+1,n);// right; } } void main() { int ar[]={1,2,3}; int br[]={0,0,0}; int n = sizeof(ar)/sizeof(ar[0]); fun(ar,br,0,n); }

程式執行結果
//最後一行的輸出結果為空子集

子集樹
//(1,1,1)–》(1,2,3)
//(1,1,0)–》(1,2)
//(1,0,1)–》(1,3)
……以此類推,寫出幾個方便大家理解##