Wangyuqi2010 @ 2024-02-25 10:59:46
#include<bits/stdc++.h>
using namespace std;
int m1[30],m2[30],m3[30],ans[15],mark;
int n;
void state(int i,int j,int k){
ans[i]=j;
m1[j]=k;
m2[i+j]=k;
m3[i-j+n]=k;
}
void dfs(int step) {
if(step>n){
mark++;
if(mark<=3){
for(int l=1;l<=n;l++){
cout<<ans[l]<<' ';
}
cout<<endl;
}
else return ;
}
for(int j=1;j<=n;j++){
if(m1[j]||m2[step+j]||m3[step-j+n]) continue;
state(step,j,1);
dfs(step+1);
state(step,j,0);
}
}
int main() {
int n;
cin>>n;
dfs(1);
cout<<mark;
return 0;
}
by _czx6666_ @ 2024-02-25 14:43:16
我感觉你的dfs有问题
by Wangyuqi2010 @ 2024-02-25 15:01:32
具体是哪里有问题呢?
by Wangyuqi2010 @ 2024-02-25 15:04:16
@czx6666
by _czx6666_ @ 2024-02-25 15:10:33
#include<bits/stdc++.h>
using namespace std;
int m1[30],m2[30],m3[30],ans[15],mark;
int n;
void state(int i,int j,int k){//问题 在这
ans[i]=j;
m1[j]=k;
cout<<1<<endl;//这里没有输出
m2[i+j]=k;
m3[i-j+n]=k;
}
void dfs(int step) {
if(step>n){
mark++;
if(mark<=3){
for(int l=1;l<=n;l++){//这里也没有输出
cout<<ans[l]<<' ';
}
cout<<endl;
}
cout<<1;//只输出了一个
return ;//这里不能有else
}
for(int j=1;j<=n;j++){
if(m1[j]||m2[step+j]||m3[step-j+n]) continue;
state(step,j,1);
dfs(step+1);
state(step,j,0);
}
}
int main() {
int n;
cin>>n;
dfs(1);
cout<<mark;
return 0;
}
by _czx6666_ @ 2024-02-25 15:12:22
@Wangyuqi2010
by Wangyuqi2010 @ 2024-02-25 15:41:05
okk 谢谢大佬
@czx6666