Cod sursa(job #2497582)

Utilizator eugen5092eugen barbulescu eugen5092 Data 22 noiembrie 2019 21:23:33
Problema Problema Damelor Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.77 kb
#include <bits/stdc++.h>
using namespace std;
ifstream ci("damesah.in");
ofstream cou("damesah.out");
struct date{
int x,y,diag1,diag2;
};
int n,v[20][20],sol[100],t=1,cn;
date date[20];

/*

void rez(int i1,int j1){

cout<<"\n"<<i1<<" "<<j1<<"\n";

    for(int j=1;j<=n;j++){
       if(v[i1][j]==1 ){
        swap(v[i1][j],v[i1][j1] );
       }
    }

        for(i=1;i<=n;i++){
       for(j=1;j<=n;j++){
    cout<<v[i][j]<<" ";
    }
    cout<<"\n";
    }

cout<<"\n\n";


}

void Back1(int k){

if(k==n||t==1){
    rez();
    t1=1;
}else{
Back1(k+1);
}


}



void Back(int i,int j){
t1=0;
if(i==n ){
    rez(i,j);
}else{
        Back(i+1,j);
}


}
*/

void schimb(int i1,int j1){
int j;
for(j=1;j<=n;j++){
    if(v[i1][j]==1 ){
        swap(v[i1][j],v[i1][j1] );
    }
}

}

void veri(){
int j,i,k=1;
  for(i=1;i<=n;i++){
       for(j=1;j<=n;j++){
    if(v[i][j]==1 ){
        date[i].x=i;
        date[i].y=j;
        date[i].diag1=n-i+j;
        date[i].diag2=j+i-1;
    }

       }
    }
    for(i=1;i<=n-1;i++){
        for(j=i+1;j<=n;j++){
            if(date[i].x==date[j].x ){k=0; }
            if(date[i].y==date[j].y ){k=0; }
            if(date[i].diag1==date[j].diag1 ){k=0; }
            if(date[i].diag2==date[j].diag2 ){k=0; }
        }
    }
    if(k==1){
            cn++;
            if(t==1){
        for(i=1;i<=n;i++){
            cou<<date[i].y<<" ";
        }
        t=0;
            }
    }


}

void Back(int i){
if(i==n+1){
    return;
}else{
    for(int j=1;j<=n;j++){
            schimb(i,j);
            veri();
        Back(i+1);
    }
}


}




int main()
{
    ci>>n;
    for(int i=1;i<=n;i++){
    v[i][1]=1;
}
        Back(1);
cou<<"\n"<<cn;


}