SimonLan @ 2024-10-12 22:02:18
#include<bits/stdc++.h>
using namespace std;
bool flag=false;
int ans[1000],N,cnt=0,p=0;
bool check(int row,int col){
for(int i=1;i<row;i++){
if(ans[i]==col||abs(col-ans[i])==abs(row-i)){
return false;
}
}
return true;
}
void dfs(int dep){
if(dep>N){
for(int i=1;i<=N;i++){
if(p==3) break;
cout<<ans[i]<<" ";
}
cnt++;
p++;
flag=true;
cout<<endl;
return;
}
for(int i=1;i<=N;i++){
if(check(dep,i)==true){
ans[dep]=i;
dfs(dep+1);
}
}
}
int main(){
cin>>N;
dfs(1);
cout<<cnt;
if(flag==false){
cout<<"no solute!";
}
}
正确输出
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4
我的输出:
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4
by lizeyang2013 @ 2024-10-19 10:15:41
你试试把换行删掉
by fjchiye @ 2024-10-24 10:46:36
你把你的代码改成这样
#include<bits/stdc++.h>
using namespace std;
bool flag=false;
int ans[1000],N,cnt=0,p=0;
bool check(int row,int col){
for(int i=1;i<row;i++){
if(ans[i]==col||abs(col-ans[i])==abs(row-i)){
return false;
}
}
return true;
}
inline void print(){
if(p<=2){
for(int i=1;i<=N;i++){
printf("%d ",ans[i]);
}
printf("\n");
}
p++;
}
void dfs(int dep){
if(dep>N){
/*
for(int i=1;i<=N;i++){
if(p==3) break;
cout<<ans[i]<<" ";
}
cnt++;
p++;
flag=true;
cout<<endl;
*/
print();
return;
}
for(int i=1;i<=N;i++){
if(check(dep,i)==true){
ans[dep]=i;
dfs(dep+1);
}
}
}
int main(){
cin>>N;
dfs(1);
//cout<<cnt;
cout<<p;
}
by luohaiyue @ 2024-11-15 20:11:13
@SimonLan 你试试把换行删掉