标签:
题目很简单,找出N个二进制下长度为B的,且两两之间二进制位上至少有D位不同
暴力枚举就好了
/* ID: modengd1 PROG: hamming LANG: C++ */ #include <iostream> #include <stdio.h> #include <memory.h> using namespace std; int sta[64]; bool slove(int sta[64],int N,int B,int D,int deep) { if(deep==N) { bool isbegin=true; for(int i=0;i<N;i++) { if(isbegin) { cout<<sta[i]; isbegin=false; } else cout<<‘ ‘<<sta[i]; if((i%10)==9)//每十个数字换行 { isbegin=true; cout<<endl; } } if((N%10))//检查是否需要在最后一行输出换行 cout<<endl; return true; } for(int i=0;i<(1<<B);i++) { bool allOk=true; sta[deep]=i; for(int j=0;j<deep;j++) { int dif=i^sta[j]; int counter=0; while(dif>0) { dif-=dif&-dif; counter++; } if(counter<D)//汉明距离小于D就break { allOk=false; break; } } if(allOk&&slove(sta,N,B,D,deep+1))//和前面得到的数的汉明距离都足够的话再枚举下一个 return true; } return false; } int main() { freopen("hamming.in","r",stdin); freopen("hamming.out","w",stdout); int N,B,D; int sta[64]; scanf("%d%d%d",&N,&B,&D); slove(sta,N,B,D,0); return 0; }
标签:
原文地址:http://www.cnblogs.com/modengdubai/p/4780097.html