View Code of Problem 450

import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		while(in.hasNext()) {
			int n  =in.nextInt();
			int k  =in.nextInt();
			if(n==-1 && k==-1) {
				break;
			}
			char[][] matrix = new char[n][n];
			for(int i =0;i<n;i++) {
				char[] line = in.next().toCharArray();
				for(int j=0;j<n;j++) {
					matrix[i][j]=line[j];
				}
			}
			int[] lie=new int[n];
			int all=0;
			for(int i =0;i<n-k+1;i++) {
				all+=put(matrix,i,lie,k);
			}
			System.out.println(all);
		}
	}
	public static int put(char[][] matrix,int h,int[] lie,int k) {
		if(k==0) {
			return 1;
		}else {
			int starth = findline(matrix,lie,h);
			if(starth==-1) {
				return 0;
			}else {
				int all=0;
				for(int i =0;i<matrix[starth].length;i++) {
					if(matrix[starth][i]=='#' && lie[i]==0) {
						matrix[starth][i]='1';
						lie[i]=1;
						all+=put(matrix,h+1,lie,k-1);
						matrix[starth][i]='#';
						lie[i]=0;
					}
				}
				return all;
			}
		}
	}
	public static int findline(char[][] matrix,int[] lie,int starth) {
		int h =starth;
		while(h<matrix.length) {
			for(int i =0;i<matrix[h].length;i++) {
				if(matrix[h][i]=='#' && lie[i]==0) {
					return h;
				}
			}
			h++;
		}
		return -1;
	}
}

Double click to view unformatted code.


Back to problem 450