N皇后问题

2021-07-06 14:54:52 浏览数 (2)

N皇后问题,也是用递归的方式来解,不一样的是,要加一个record记录之前的皇后的位置来确定之后的皇后放的位置对不对

代码语言:javascript复制
import java.util.ConcurrentModificationException;

public class NQueens {
    public static void main(String[] args) {
        NQueens nQueens = new NQueens();
        System.out.println(nQueens.num(10));
    }
    public static int num(int n){
        if (n<=0){
            return 0;
        }
        int[] record=new int[n];
        return process(0,record,n);
    }
    //潜台词record[0...i-1]的所有皇后不共行,不共列
    //目前来到了第i行
    //n代表整体一共有多少行
    //返回值是摆完所有的皇后,合理的摆法有多少种
    public static int process(int i,int[] record,int n){
        if (i==n){//到达了中止行
            return 1;
        }
        int res=0;
        for (int j=0;j<n;j  ){//当前行在i行,尝试i行的每一列
            if(isValid(record,i,j)){
                record[i]=j;
                res =process(i 1,record,n);
            }
        }
        return res;
    }

    private static boolean isValid(int[] record, int i, int j) {
        for (int k=0;k<i;k  ){
            if (j==record[k]||Math.abs(k-i)==Math.abs(record[k]-j)){
                return false;
            }

        }
        return true;
    }


}

0 人点赞