1 条题解

  • 0
    @ 2025-10-8 17:11:25
    #include<bits/stdc++.h>
    using namespace std;
    const int N=20;
    int n,a[N][N],ans;
    bool row[2*N],col[2*N],LL[2*N],RR[2*N];
    void dfs(int x)
    {
        if(x==n+1)ans++;
        else
        {
            int i=x;
            for(int j=1;j<=n;j++)
            {
                if(row[i]==0&&col[j]==0&&LL[i-j+n]==0&&RR[i+j]==0&&a[i][j]==0)
                {
                    a[i][j]=1;
                    row[i]=col[j]=LL[i-j+n]=RR[i+j]=1;
                    dfs(x+1);
                    a[i][j]=0;
    				row[i]=col[j]=LL[i-j+n]=RR[i+j]=0;
                }
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        memset(row,0,sizeof(row));
        memset(col,0,sizeof(col));
        memset(LL,0,sizeof(LL));
        memset(RR,0,sizeof(RR));
        memset(a,0,sizeof(a));
    	for (int i=1; i<=n; i++)for (int j=1; j<=n; j++)scanf("%d",&a[i][j]);
        ans=0;
    	dfs(1);
    	printf("%d\n",ans);
        return 0;
    }
    
    • 1

    信息

    ID
    6478
    时间
    3000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    177
    已通过
    30
    上传者