Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
菜鸟的代码,易懂#include<stdio.h> #include<string.h> #include<iostream> char str[4]; int bit[16];//原来的东西 int result[16];//存储的是结果 int hm; int ok; using namespace std; int check() { for(int i=1;i<16;i++) if(bit[i]!=bit[i-1]) { return 0;//表示的是此时已经不匹配 } return 1;//表示此时已经匹配了 } void changecolor(int i) { bit[i]=!bit[i]; int x=i/4; int y=i%4; if(y<3) bit[i+1]=!bit[i+1]; if(y>0) bit[i-1]=!bit[i-1]; if(x>0) bit[i-4]=!bit[i-4]; if(x<3) bit[i+4]=!bit[i+4]; //changecolor } void combine(int start,int hm,int len) { if(ok==1) return; for(int i=start;i>=hm;i--) { result[hm-1]=i-1;//表示的是放置结果 if(hm>1) combine(i-1,hm-1,len); else { for(int j=0;j<len;j++) changecolor(result[j]); if(check()) { ok=1; printf("%d\n",len); break; } else { for(int j=0;j<len;j++) changecolor(result[j]);//把他变回去 } } } return; } int main(void) { int line=4; int k=0; hm=0; ok=0; while(line--) { scanf("%s",str); for(int i=0;i<4;i++) { if(str[i]=='b') bit[k++]=1; else if(str[i]=='w') bit[k++]=0; } } if(check()) { printf("0\n");//此时已经匹配了 } else { for(int i=1;i<=16;i++)//这里的i表示的是选择多少个数字来进行查找 combine(16,i,i); if(ok==0) printf("Impossible\n"); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator