Why?!(悬一关)

P1219 [USACO1.5] 八皇后 Checker Challenge

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 你在主函数里又定义了一次n,使得 n 的全局变量值为1

删去主函数里的

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 还有判对角线的时候,右上至左下应该是 i-s+n


by Junior_Young @ 2024-02-05 19:46:37

万分感谢 @call_of_silence 会关 此贴结


|