Cod sursa(job #2953901)

Utilizator stefan2806Radulescu Stefan stefan2806 Data 12 decembrie 2022 16:44:41
Problema Dame Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>
#include <cmath>
#include <cstdlib>

using namespace std;

ifstream cin("dame.in");
ofstream cout("dame.out");

int sol[1010],n,i,col=1;
bool linie[1010],diag1[2010],diag2[2010];
bool verif(int k,int i)
{
    int j;
    for(j=1; j<k; j++)
        if(sol[j]==i)
            return 0;
    for(j=1; j<k; j++)
        if(k-j==abs(sol[j]-i))
            return 0;
    return 1;
}

void afis()
{
    int i,j;
    cout<<n<<'\n';
    for(i=1; i<=n; i++)
        cout<<sol[i]<<" "<<i<<'\n';
    exit(0);
}

void bkt(int k)
{
    int i;
    if(k==n+1)
        afis();
    else
    {
        for(i=1; i<=n; i++)
        {
            if(!linie[i]&&!diag1[k-i+n-1]&&!diag2[k+i])
            {
                sol[k]=i;
                linie[i]=1;
                diag1[k-i+n-1]=1;
                diag2[k+i]=1;
                bkt(k+1);
                linie[i]=0;
                diag1[k-i+n-1]=0;
                diag2[k+i]=0;
            }
        }
    }
}

int main()
{
    cin>>n;
    if(n==2)
        cout<<1<<'\n'<<"1 1";
    if(n==3)
        cout<<2<<'\n'<<"1 1"<<'\n'<<"3 2";
    if(n<=3)
        return 0;
    cout<<n<<'\n';
    for(i=1;i<=(n+1)/2;i++)
    {
        cout<<i<<" "<<col<<'\n';
        col+=2;
    }
    col=2;
    for(i=(n+1)/2;i<=n;i++)
    {
        cout<<i<<" "<<col<<'\n';
        col+=2;
    }
    //bkt(1);
    return 0;
}