深度优先搜索(dfs)以八皇后问题为例
#define MAX 105
int n,vis[3][MAX];
int cnt=0;
void dfs(int d){
if(d==n+1){
cnt++;
return;
}
for(int j=1;j<=n;j++){
if(!vis[0][j] && !vis[1][d-j+n] && !vis[2][d+j]){ // 分别表示这一列、副对角线、主对角线
vis[0][j]=vis[1][d-j+n]=vis[2][d+j]=1;
dfs(d+1);
vis[0][j]=vis[1][d-j+n]=vis[2][d+j]=0;
}
}
}