您的位置:首页 > 其它

USACO 2.1.5 Hamming Code

2014-07-18 12:51 288 查看


水题。DFS暴搜即可。

注意题目要求输出十个数换行。

/*
ID:szwjcch971
LANG:C++
TASK:hamming
*/
#include "stdio.h"
#include "string.h"
int pw2m1[9]={0,1,3,7,15,31,63,127,255};
int N,B,D,top=1;
int stack[70];
FILE *fin=fopen("hamming.in","r");
FILE *fout=fopen("hamming.out","w");
int judge(int a,int b,int d){
int i,temp;
temp=a^b;
i=0;
while(temp){
i+=temp&1;
temp=temp>>1;
}
if(i>=d)return 1;else return 0;
}
int DFS(int layer,int num){
int i,flag,j,k=0;
if(layer==N){
return 1;
}
if(num>pw2m1[B]){
return 0;
}
for(i=num+1;i<=pw2m1[B];i++){
flag=1;
for(j=1;j<=top;j++){
if(!judge(i,stack[j],D)){
flag=0;
break;
}
}
if(flag){
top++;
stack[top]=i;
k=DFS(layer+1,i);
if(k)break;
}
}
return k;
}
int main(){
memset(is_visited,0,sizeof(is_visited));
memset(q,0,sizeof(q));
int i,j,k;

fscanf(fin,"%d%d%d",&N,&B,&D);
for(i=0;i<=pw2m1[B]-N+2;i++){
top=1;
stack[top]=i;
k=DFS(1,i);
if(k){
break;
}
}
for(i=1;i<=top;i++){
fprintf(fout,"%d",stack[i]);
if((i%10==0)||(i==top))fprintf(fout,"\n");
else fprintf(fout," ");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  USACO 水题 2.1.5 DFS