只有本站会员才能查看附件,请 登录
下面是我的代码,
输入6,的结果是
只有本站会员才能查看附件,请 登录

看了好久,依然没找出哪儿里错了。也许眼尖的你可以帮我找出错误。

#include<iostream>
#include<stdio.h>
using namespace std;
int n;
const int N=30;
int path[N];
bool col[N],dg[N],udg[N];
int sum;
void dfs(int u){
if(u>n){
sum++;
if(sum>3)return;
else{
for(int i=1;i<=n;i++)printf("%d ",path[i]);
printf("\n");
return;
}
}
for(int i=1;i<=n;i++){
if((!col[i])&&(!dg[n+u-i])&&(!udg[i+u])){
path[u]=i;
col[i]=true,dg[n+i-u]=true,udg[i+u]=true;
dfs(u+1);
col[i]=false,dg[n+i-u]=false,udg[i+u]=false;
}
}
}
int main(){
cin>>n;
dfs(1);
cout<<sum;
return 0;
}
#include<stdio.h>
using namespace std;
int n;
const int N=30;
int path[N];
bool col[N],dg[N],udg[N];
int sum;
void dfs(int u){
if(u>n){
sum++;
if(sum>3)return;
else{
for(int i=1;i<=n;i++)printf("%d ",path[i]);
printf("\n");
return;
}
}
for(int i=1;i<=n;i++){
if((!col[i])&&(!dg[n+u-i])&&(!udg[i+u])){
path[u]=i;
col[i]=true,dg[n+i-u]=true,udg[i+u]=true;
dfs(u+1);
col[i]=false,dg[n+i-u]=false,udg[i+u]=false;
}
}
}
int main(){
cin>>n;
dfs(1);
cout<<sum;
return 0;
}