本文主要是介绍POJ-1753 Flip Game【暴力枚举】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.思路分析
暴力枚举,枚举所有可能的情况
2.方法设计及性能衡量
用位运算加速,由于最高循环为2^16-1,所以时间不会超时。
3.实现部分
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int a=0,b[5][5],t[5][5],min;
char temp[5][5];
void change(int a1,int a2){if(a2==0)a2=4;b[a1][a2]=!b[a1][a2];b[a1][a2-1]=!b[a1][a2-1];b[a1][a2+1]=!b[a1][a2+1];b[a1-1][a2]=!b[a1-1][a2];b[a1+1][a2]=!b[a1+1][a2];
}
int judge(){int i,j;for(i=1;i<=4;i++){for(j=1;j<=4;j++){if(b[i][j]!=b[1][1])return 0;}}return 1;
}
void restart(){int i,j;for(i=1;i<=4;i++){for(j=1;j<=4;j++){b[i][j]=t[i][j];}}
}
void fun(){int i,count=0;restart();int j; for(i=0;i<16;i++){if(a&(1<<i)){change(i/4+1,(i+1)%4);count++;}}if(judge()){min=min>count?count:min; }
}
int scan(){int i,j=0;for(i=1;i<=4;i++){scanf("%s",temp[i]);for(j=0;j<=3;j++){if(temp[i][j]=='w')t[i][j+1]=0;if(temp[i][j]=='b')t[i][j+1]=1;}}return 1;
}
int main(){scan();min=17;for(a=0;a<=65535;a++)fun();if(min<=16)printf("%d\n",min);else printf("Impossible\n");return 0;
}
这篇关于POJ-1753 Flip Game【暴力枚举】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!