递归6

83 阅读1分钟

N皇后问题是指在N*N的棋盘上摆N个皇后

要求任何两个皇后不同行,不同列,也不在同一条斜线上,

给定一个正数n,返回n皇后的摆法有多少种。

代码:

public class Class1 {
    public static void main(String[] args) {
        int num = 14;
        int[] values = new int[num];
        int i1 = process1(0, values, num);
        System.out.println("i1 = " + i1);
    }
     
private static int process1(int position,int[] values,int num){
        if(position == num){
            return 1;
        }

        int result = 0;
        for(int j=0;j<num;j++){
            if(valid(values,position,j)){
                values[position] = j;
                result += process1(position+1,values,num);
            }
        }
        return result;
    }

    private static boolean valid(int[] values,int position,int j){
        for (int i = 0; i < position; i++) {
            if(j==values[i] || Math.abs(position-i) == Math.abs(j-values[i])){
                return false;
            }
        }
        return true;
    }
}