求调

P1219 [USACO1.5] 八皇后 Checker Challenge

renzhanwen @ 2024-06-11 20:06:34

样例过了,只有61分,直接上代码。


#include<bits/stdc++.h>
using namespace std;
int n,m,a[100][100];
bool s[100]={false};
bool wow(int i,int j)
{
    for(int y=1;y<=n;y++)//左下角
    {
        if(i+y>n||i-y<1)
            break;
        if(a[i+y][j-y]!=0)
            return false;
    }
    for(int y=1;y<=n;y++)//右下角
    {
        if(i+y>n||j+y>n)
            break;
        if(a[i+y][j+y]!=0)
            return false;
    }
    for(int y=1;y<=n;y++)//左上角
    {
        if(i-y<1||j-y<1)
            break;
        if(a[i-y][j-y]!=0)
            return false;
    }
    for(int y=1;y<=n;y++)
    {
        if(i-y<1||j+y>n)
            break;
        if(a[i-y][j+y]!=0)
            return false;
    }
    return true;
}
void f(int t)
{
    if(t>n)
    {
        bool x=true;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
                if(a[i][j]!=0&&wow(i,j)==false)
                    {
                        x=false;
                        break;
                    }
            if(x==false)
                break;
        }
        if(x==true)
        {
            m++;
            if(m<=3)
            {
                for(int i=1;i<=n;i++)
                    for(int j=1;j<=n;j++)
                        if(a[i][j]!=0)
                            cout<<j<<" ";
                cout<<endl;
            }
        }
        return;
    }
    for(int i=1;i<=n;i++)
        if(s[i]==false)
        {
            s[i]=true;
            a[t][i]=t;
            f(t+1);
            a[t][i]=0;
            s[i]=false;
        }
}
int main()
{
    cin>>n;
    f(1);
    cout<<m;
    return 0;
}

|