枚举 熄灯问题java实现
import java.util.Scanner; //熄灯问题 public class S4 { static char[] orLights=new char[5]; //每个元素对应灯矩阵的一行 static char[] light=new char[5]; //变化中的灯的矩阵 static char[] result=new char[5];//结果开关矩阵 public static void main(String[] args) { Scanner sc=new Scanner(System.in); for(int i=0;i<5;++i) { for(int j=0;j<6;++j) { int s=sc.nextInt(); orLights[i]=setBit(orLights[i],j,s); } } for(int n=0;n<64;n++) { int switchs=n; System.arraycopy(orLights, 0, light, 0, 5); for(int i=0;i<5;i++) { result[i]=(char) switchs; for(int j=0;j<6;j++) { if(getBit((char)switchs,j)==1) { if(j>0) light[i]=Flip(light[i],j-1); light[i]=Flip(light[i],j); if(i<5) light[i]=Flip(light[i],j+1); } } if(i<4) light[i+1]^=switchs; switchs=light[i]; } if(light[4]==0) { //最后一行等于0,代表全部熄灭 outputResult(result); break; } } } static int getBit(char c,int i) { //取C的第i位 return (c>>i)&1; } static char setBit(char c,int i,int v) { //设置c的第i位为v if(v!=0) c|=(1<<i); else c&=~(1<<i); return c; } static char Flip(char c,int i) { //将c的第i位取反 c^=(1<<i); return c; } static void outputResult(char result[]) { System.out.println("PUZZLE#"); for(int i=0;i<5;i++) { for(int j=0;j<6;++j) { System.out.print(getBit(result[i],j)); if(i<5) System.out.print(" "); //每个数之间有空格 } System.out.println(); } } }