深搜经典题目
递归!!
首先是要确定边界,在确定边界的基础上再去处理数据;
例如八皇后,我们定义每一层为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; }