1363. 汉明码

在\(0 \sim 2^{B}-1\)中,从小到大搜索出\(n\)个满足任意两个编码之间码距大于等于\(d\)的二进制编码。

const int N=70;
int path[N];
int n,b,d;

bool dfs(int u,int start)
{
    if(u == n)
    {
        for(int i=0;i<n;i++)
        {
            cout<<path[i];
            if((i+1) % 10 == 0 or i == n-1) cout<<endl;
            else cout<<' ';
        }
        return true;
    }

    for(int i=start;i<(1<<b);i++)
    {
        bool ok=true;
        for(int j=0;j<u;j++)
            if(__builtin_popcount(path[j]^i) < d)
            {
                ok=false;
                break;
            }

        if(ok)
        {
            path[u]=i;
            if(dfs(u+1,i+1)) return true;
        }
    }
    return false;
}

int main()
{
    cin>>n>>b>>d;

    dfs(0,0);

    //system("pause");
    return 0;
}
上一篇:大牛用SSM框架实现了支付宝的支付功能,聪明人已经收藏了!


下一篇:Linux awk续讲