N皇后问题
来源:互联网 发布:gson如何解析json数组 编辑:程序博客网 时间:2024/06/14 11:24
【题目】
在N×N的棋盘上要摆N个皇后,要求任何两个皇后不同行不同列,也不再同一条斜线上。给定一个整数n,返回n皇后的摆法有多少种。
【举例】
n=1,返回1
n=2或3,无论怎么摆都不行,返回0
n=8,返回92
【代码】
public static void main(String[] args) { System.out.println(queen(1));//1 System.out.println(queen(2));//0 System.out.println(queen(8));//92 } //N皇后问题 public static int queen(int n){ if(n<1){ return 0; } int[] record=new int[n];//record[i]表示第i行皇后所在的列数 return queenprocess(0,record,n); } private static int queenprocess(int i, int[] record, int n) { if(i==n){ return 1;//最后一行只有一个位置? } int res=0; for(int j=0;j<n;j++){//从第0列开始依次放置皇后,判断该位置是否合适 if(isValid(record,i,j)){ record[i]=j; res+=queenprocess(i+1,record,n);//递归,逐行寻找皇后位置 } } return res; } private static boolean isValid(int[] record, int i, int j) { for(int k=0;k<i;k++){//查看前i行的皇后位置 if(j==record[k]||Math.abs(record[k]-j)==Math.abs(k-i)){ return false;//同列、在斜线上,都不能放皇后 } } return true; }
阅读全文