extendedlightsout.java

来自「PKU中一些数据结构基本算法题的java实现」· Java 代码 · 共 105 行

JAVA
105
字号
import java.util.Scanner;


public class EXTENDEDLIGHTSOUT {

	static int[] A;
	static int[] B;
	static int[] C;
	static int Col = 6;
	static int Row = 5;
	static int step;
	static int min;
	static int num;
	
	

	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int caseNum = cin.nextInt();
		for(int k=0;k<caseNum;k++){
			min = Col*Col+1;
			step = 0;
			A = new int[Row+2];
			C = new int[Row+2];
			for(int i=1;i<=Row;i++){
				int num=0;
				for(int j=1;j<=Col;j++){
					int c = cin.nextInt();
					if(c==0){
						num = num << 1;
						
					}
					else{
						num = num << 1;
						num+=1;
					}
				}
				A[i] = num;
			}

			solve();
			System.out.println("PUZZLE #" + (k+1));
			output();
			
			
		}
		


	}
	

	static void output(){
		for(int i=1;i<=Row;i++){
			StringBuffer str = new StringBuffer();
			for(int j=0;j<Col;j++){
				C[i] = (C[i]<<1);
				if((C[i] & num)!=0){
					str.append("1 ");
				}
				else{
					str.append("0 ");
				}
			}
			str.deleteCharAt(str.length()-1);
			System.out.println(str);
		}
	}
	
	static void solve(){
		int T = 0;
		num = 2<<(Col-1);

		for(int i=0;i<num;i++){
			B = A.clone();
			T = i;
			B[1] = (B[1]^(T<<1)^T^(T>>1)) & (num-1);
			B[2] = B[2]^T;
			C[1] = T;
			for(int j=2;j<=Row;j++){
				T = B[j-1];
				
				C[j] = T;
				
				B[j-1] = T^B[j-1];
				B[j] = (B[j]^(T<<1)^T^(T>>1)) & (num-1);
				// & (1<<size-1)
				B[j+1] = T^B[j+1];
			}
			if(B[Row]==0){
				return;
			}
			
		}
		
	}
	


}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?