Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
两道题思路基本一样,第二题的代码比较整洁,思路是用一个res[n]数组,其中res[i]的值代表第i行的queen摆放的列的位置,我们只需要判断当前的res[i]与之前的所有res[k] k<i ,即i与k是否在相同的列,或者是否存在于对方的对角线上,代码:
int count=0; int res[]; public int totalNQueens(int n) { res=new int[n]; getcount(0,n); return count; } public void getcount(int cur,int n){ if(cur==n) { count++; return; } for(int i=0;i<n;i++){ res[cur]=i; if(isvalid(cur)) getcount(cur+1,n); } } public boolean isvalid(int cur){ for(int i=0;i<cur;i++){ if(res[i]==res[cur]||Math.abs(res[i]-res[cur])==cur-i) return false; } return true; }