Thứ Hai, 31 tháng 10, 2011

Phương Pháp Sinh-Phát sinh dãy số nhị phân

Cho số n, hãy phát sinh ra các dãy nhị phân có chiều dài đúng bằng n.
Ví dụ:
n=2 các dãy nhị phân là:  00  01  10 11
n=3 các dãy nhị phân tương ứng là :000 001  010   011  100   101   110  111
  Đi từ cuối dãy nếu gặp số 0 thì đổi thành 1 và những số 1 đằng sau biến thanh số 0   
#include<iostream>
#include<stack>
#include<queue>
#include<algorithm>
using namespace std;
vector< vector<int> >PhatSinhdayNhiPhan(int n)
{
    vector< vector<int> > tem;
    vector<int> bandau(n,0);
    vector<int> cuoicung(n,1);
    int size=bandau.size();
    tem.push_back(bandau);
    while(!equal(bandau.begin(),bandau.end(), cuoicung.begin()) )
    {      
        for(int i=size-1;i>=0;i--)
        {
            if(bandau[i]==0)
            {
                bandau[i]=1;
                for(int j=i+1;j<size;j++)
                {
                    bandau[j]=0;
                }
                break;
            }
        }
        tem.push_back(bandau);      
    }
    return tem;
}

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

Đăng nhận xét