1. 程式人生 > >八皇后問題複習

八皇后問題複習

深搜經典題目

遞迴!!

首先是要確定邊界,在確定邊界的基礎上再去處理資料;

 

例如八皇后,我們定義每一層為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; }