Pagini recente » Cod sursa (job #2914431) | Cod sursa (job #1445968) | Cod sursa (job #2744597) | Cod sursa (job #552231) | Cod sursa (job #1257281)
#include <iostream>
#include <fstream>
#define VM 100
#include <vector>
using namespace std;
int m[VM][VM];
int col[VM];
int d1[VM];
int d2[VM];
int lin[VM];
vector<int> sol;
int k = 0, ok = 1;
void Asezare(int i, int j, int x, int n){
///Daca x = 1 plasam dama,
///Daca x =-1 luam dama
m[i][j] += x;
lin[i] += x;
col[j] += x;
d1[i - j + n] += x;
d2[i + j] += x;
}
bool Verificare(int i, int j, int n){
///Daca e libera pozitia
return (lin[i] == 0 && col[j] == 0 && d1[i - j + n] == 0 && d2[i + j] == 0);
}
void Dame(int i, int j, int n){
///Conditie de oprire
if(i > n){
ok = 0;
++k;
return;
}
if(j > n){
if(lin[i] == 1)
Dame(i + 1 , 1 , n);
}
else{
if(Verificare(i , j , n)){
///Daca pozitia e libera punem dama
Asezare(i , j , 1 , n);
if(ok)
sol.push_back(j);
Dame(i + 1 , 1 ,n);
///Luam dama
Asezare(i , j , -1 , n);
if(ok)
sol.pop_back();
}
Dame(i , j + 1 , n);
}
}
ifstream f("damesah.in");
ofstream g("damesah.out");
int main()
{
int n;
f>>n;
Dame(1 , 1 , n);
for(int i = 0 ; i <= 3 ; ++i)
g<<sol[i]<<" ";
g<<"\n";
g<<k;
return 0;
}