在(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;
}