题目链接:八皇后
这道题目实际上就是八皇后的简单拓展,在简单的八皇后上变化了一下,要求你去保存每种方式的路径,所以在dfs里面需要一个二维的ans数组老保存每一次操作每一行的位置
#include <bits/stdc++.h>
using namespace std;
int n,ind,ans[96][10];
bool row[12],dia1[25],dia2[25];
void dfs(int q){
if(q > 8){
ind++;
for(int i = 1;i <= 8;i++)
ans[ind][i] = ans[ind-1][i];
return ;
}
for(int r = 1;r <= 8;r++){
if(row[r]&&dia1[r+q]&&dia2[8-q+r]){
row[r] = dia1[r+q] = dia2[8-q+r]=false;
ans[ind][q] = r;
dfs(q+1);
row[r] = dia1[r+q] = dia2[8-q+r]=true;
}
}
}
int main(){
memset(row,true,sizeof(row));
memset(dia1,true,sizeof(dia1));
memset(dia2,true,sizeof(dia2));
ind = 1;
dfs(1);
int t,n;
cin>>t;
while(t--){
cin>>n;
for(int i = 1;i <= 8;i++)
cout<<ans[n][i];
cout<<endl;
}
return 0;
}