ammdyc @ 2023-08-27 11:34:38
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,t,cnt,f;
int a[14][14],b[14],c[50],d[50];
char s[50][50];
void dfs(int i){
if(i==n+1){
f++;
t++;
for(int x=1;x<=n;x++){
for(int y=1;y<=n;y++){
if(f<=3&&a[y][x]==1){
cout<<y<<" ";
}
}
}
if(f<=3)
cout<<endl;
}
int j;
for(j=1;j<=n;j++){
if((!b[j])&&(!c[i+j])&&(!d[j-i+(n-1)])){
a[i][j]=1;
b[j]=1;
c[i+j]=1;
d[j-i+(n-1)]=1;
dfs(i+1);
b[j]=0;
c[i+j]=0;
d[j-i+(n-1)]=0;
a[i][j]=0;
}
}
}
int main(){
cin>>n;
dfs(1);
cout<<t;
return 0;
}
by qzmoot @ 2023-08-27 11:49:52
我寻思这题和排序也没关系啊
by ammdyc @ 2023-08-27 11:56:02
@qzmoot 不是字典序排序吗
by qzmoot @ 2023-08-27 11:59:38
@ammdyc 哦,应该是回溯的问题
by ammdyc @ 2023-08-27 12:08:27
具体什么问题
by Szy0720 @ 2023-08-27 14:37:29
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,t,cnt,f;
//f,cnt可以不要。t是个数 。
int a[14],b[14],c[50],d[50];
//a没必要开二维。
//a:列,b:左斜,c:右斜,d:行。
char s[50][50];//不用s字符数组。
void dfs(int i){
if(i==n+1){
//f++;
t++;
if(t<=3){
//只输出列,读题。
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
}
int j;
for(j=1;j<=n;j++){
if((!b[j])&&(!c[i+j])&&(!d[j-i+(n-1)])){
a[i]=j;
//第i个王后在j列。
b[j]=1;
c[i+j]=1;
d[j-i+(n-1)]=1;
dfs(i+1);
b[j]=0;
c[i+j]=0;
d[j-i+(n-1)]=0;
//a[i][j]=0;不用。
}
}
}
int main(){
cin>>n;
dfs(1);
cout<<t;
return 0;
}
by ammdyc @ 2023-08-27 14:39:10
@Szy0720
谢谢!!!
by Szy0720 @ 2023-08-27 14:39:59
@ammdyc 亲测,AC,注释写在代码了。 主要是题没读明白,多读几遍。