八皇后問題複習
阿新 • • 發佈:2018-11-15
深搜經典題目
遞迴!!
首先是要確定邊界,在確定邊界的基礎上再去處理資料;
例如八皇后,我們定義每一層為cur(行),開一個一維陣列,其中cur相當於下標,內容相當於列位置,直接遞迴去比較,(其中前n層必定確定成立,只需要判斷當前cur層)
C[cur] == C[j]
C[cur]+cur == C[j]+j
行列和
C[cur]-cur == C[j]-j
行列差
如果上述皆不成立,繼續遞迴
#include<iostream> using namespace std; int tot,n,que[50];void dfs(int cur){ if(cur == n) tot++; else for(int i=0;i<n;i++){ bool ok=true; que[cur]=i; for(int j=0;j<cur;j++) if(que[cur]==que[j] || que[cur]-cur==que[j]-j || que[cur]+cur==que[j]+j) { ok=false; break; }if(ok) dfs(cur+1); } } int main(){ cin>>n; tot=0; dfs(0); cout<<tot; return 0; }