标签:
比较简单,废话不说,上代码:
public class NQueen { //比如:position[1]=3,表示第一行的第三列有一个皇后 private int [] position; //总的方法数量 private int total; private int numOfQueens; public NQueen(int n) throws Exception { if(n<0) throw new Exception("can not be negative..."); else { //position[0]不用 position= new int[n+1]; numOfQueens = n; total = 0; } } public int nQueen() { putQueen(1); return total; } //在第row行放一个queen private void putQueen(int row) { if(row==numOfQueens+1) { total++; return; } //遍历第row行放置皇后的所有的可能性 for(int i=1;i<=numOfQueens;i++) { position[row]=i; //如果放的合理 if(checkIfValid(row)) putQueen(row+1);//则递归求解 } } //检查放的是否合理 private boolean checkIfValid(int row) { if(row==1) return true; for(int i=1;i<row;i++) { if(!check(i,row)) return false; } return true; } private boolean check(int a,int b) { if(position[a]==position[b] || (a-b)==(position[a]-position[b]) || (a-b)==-1*(position[a]-position[b])) return false; return true; } /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { NQueen nq = new NQueen(8); System.out.println(nq.nQueen()); // TODO Auto-generated method stub } }
标签:
原文地址:http://www.cnblogs.com/wzm-xu/p/4832170.html