Thứ Hai, 31 tháng 10, 2011

Đệ quy quay lui- Phát sinh dãy số nhị phân

class BackTracking
{
public:
    int n;
    vector< vector<int> > ketqua;
    vector<int>tem;
    vector<int>GhiNhanViTri;
    void ps()
    {
        GhiNhanViTri.assign(n,0);
    }
    void xoa(vector<int> & vd, int vt)
    {
        vector<int>::iterator it=vd.begin();
        it=it+vt;
        vd.erase(it,vd.end());
    }
    void DayNhiPhan(int i)
    {
        for(int j=0;j<=1;j++)   
        {
            if(GhiNhanViTri[i]==0)
            {
                xoa(tem,i);
                tem.push_back(j);;
            }
            if(i==n-1)
            {
                ketqua.push_back(tem);
               
            }
            else
            {
                GhiNhanViTri.push_back(1);
                DayNhiPhan(i+1);
                GhiNhanViTri.push_back(0);
            }
        }
    }
};
int _tmain(int argc, _TCHAR* argv[])
{  
    BackTracking ob;
    ob.n=10;
    ob.ps();
    ob.DayNhiPhan(0);
}
Thay vì dùng mảng ta dùng vector để thấy nhiều cái tiện lợi của nó.


Không có nhận xét nào:

Đăng nhận xét