Junior_Young @ 2024-02-05 16:19:40
输入任何东东,都只输出
1
code如下,问什么情况
#include<iostream>
#include<algorithm>
using namespace std;
const int N=51;
int n,cnt=0;
int u[N];
bool p[N],q[N];
void dfs(int s)
{
if(s>n)
{
if(cnt<3)
{
for(int i=1;i<=n;i++)
cout << u[i] <<' ';
cout <<endl;
}
cnt++;
return ;
}
for(int i=1;i<=n;i++)
{
if((!u[i])&&(!p[i+s])&&(!q[i-s+n]))
{
u[i]=s;p[i+s]=q[i-s+n]=1;
dfs(s+1);
u[i]=0;p[i+s]=q[i-s+n]=0;
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n;cin>>n;
dfs(1);cout<<cnt;
return 0;
}
救救 @jmsyang0808 吧!
by call_of_silence @ 2024-02-05 16:31:05
@jmsyang0808 你在主函数里又定义了一次
删去主函数里的
int n
by Junior_Young @ 2024-02-05 16:58:27
@call_of_silence 谢谢 但是WA啊(顺序不对)
by call_of_silence @ 2024-02-05 17:04:54
@jmsyang0808 你存方案和判一列出现皇后没有需要两个数组
#include<iostream>
#include<algorithm>
using namespace std;
const int N=51;
int n,cnt=0;
int u[N],l[N];
bool p[N],q[N];
void dfs(int s)
{
if(s>n)
{
if(cnt<3)
{
for(int i=1;i<=n;i++)
cout << u[i] <<' ';
cout <<endl;
}
cnt++;
return ;
}
for(int i=1;i<=n;i++)
{
if((!l[i])&&(!p[i+s])&&(!q[s-i+n]))
{
l[i]=1;p[i+s]=q[s-i+n]=1;
u[s]=i;
dfs(s+1);
l[i]=0;p[i+s]=q[s-i+n]=0;
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n;
dfs(1);cout<<cnt;
return 0;
}
by call_of_silence @ 2024-02-05 17:06:13
@jmsyang0808 还有判对角线的时候,右上至左下应该是
by Junior_Young @ 2024-02-05 19:46:37
万分感谢 @call_of_silence 会关 此贴结