Pagini recente » Cod sursa (job #2584753) | Cod sursa (job #892602) | Cod sursa (job #2717699) | Cod sursa (job #110303) | Cod sursa (job #1469530)
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <vector>
#define UNASSIGNED 0
#define ASSIGNED 1
using namespace std;
ifstream in("damesah.in");
ofstream out("damesah.out");
int N, nr = 0;
bool Verifica(int **table, int row, int col){
for(int i = 0; i < col; ++i)
if(table[row][i] == ASSIGNED)
return false;
for(int i = row, j = col; i >= 0 && j >= 0; --i, --j)
if(table[i][j] == ASSIGNED)
return false;
for(int i = row, j = col; j >= 0 && i < N; ++i, --j)
if(table[i][j] == ASSIGNED)
return false;
return true;
}
bool Dame(int **table, int col){
if(col >= N){
nr++;
if(nr == 1){
for(int i = 0; i < N; ++i){
for(int j = 0; j < N; ++j){
if(table[i][j] == ASSIGNED)
out << j+1 << ' ';
}
}
}
}
for(int i = 0; i < N; ++i){
if(Verifica(table, i, col) == true){
table[i][col] = ASSIGNED;
if(Dame(table, col+1) == true)
return true;
table[i][col] = UNASSIGNED;
}
}
return false;
}
int main(){
in >> N;
int **table = new int*[N];
for(int i = 0; i < N; ++i)
table[i] = new int[N];
for(int i = 0; i < N; ++i)
for(int j = 0; j < N; ++j)
table[i][j] = UNASSIGNED;
Dame(table, 0);
out << "\n" << nr;
for(int i = 0; i < N; ++i)
delete[] table[i];
delete[] table;
return 0;
}