Pagini recente » Cod sursa (job #1295857) | Cod sursa (job #1377925) | Cod sursa (job #1770529) | Cod sursa (job #1491479) | Cod sursa (job #1662685)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
class Solution {
public:
vector<vector<string> > solveNQueens(int n) {
vector<vector<string> > sol;
intsol.resize(n);
Helper(sol,n,0);
return sol;
}
private:
vector<string> partSol;
string part;
vector<int> intsol; // regina pe o linie
void Helper(vector<vector<string> > &sol, int n, int l){
if(l == n){
for(int i = 0; i < n ; ++ i){
part = "";
for(int j = 0 ; j < n ; ++ j)
if(intsol[i] == j)
part.push_back('Q');
else part.push_back('.');
partSol.push_back(part);
}
sol.push_back(partSol);
return;
}
for(int c = 0 ; c < n ; ++ c){
intsol[l] = c;
bool ok = 1;
for(int j = 0 ; j < l ; ++ j){
if(intsol[j] == intsol[l] || abs(intsol[l] - intsol[j]) == l-j){
ok = 0; break;
}
}
if(ok)
Helper(sol,n,l+1);
}
}
};
int main()
{
int n;
fin >> n;
Solution *p = new Solution();
vector<vector<string> > s = p->solveNQueens(n);
vector<int> sl;
for(int i = 0 ; i < n; ++ i)
for(int j = 0 ; j < n ; ++ j)
if(s[0][i][j] == 'Q')
sl.push_back(j);
for(int i = 0 ; i < sl.size(); ++ i)
fout << sl[i] + 1 << " ";
fout <<"\n" << s.size();
return 0;
}