#include #include using namespace std; const int MAXS = 15; const int EMPTY = 0; const int NOSQ = -1; int grid[MAXS][MAXS]; int numr, numc; int pcount; bool nextEmptySq(int rows, int cols, int& newr, int& newc) { if (++newc == cols) { newr++; newc=0; } while (newr < rows) { if (grid[newr][newc] == EMPTY) return true; if (++newc == cols) { newr++; newc=0; } } return false; } bool okToPlace(double v, int r, int c) { if (grid[r][c] == v) return false; for(int row=0; row> r >> c; rlist[0] = minr = maxr = r; clist[0] = minc = maxc = c; for(int i=1; i> r >> c; if (r < minr) minr = r; else if (r > maxr) maxr = r; if (c < minc) minc = c; else if (c > maxc) maxc = c; rlist[i] = r, clist[i] = c; } numr = maxr-minr+1; numc = maxc-minc+1; for(int r=0; r= n) return 0; else return 2*(n-target); } int numDiv(int target, int n) { if (target <= 1) return 0; else return 2*(n/target); } void countPlacements(int a[], bool used[], int i, int n, int row, int col) { if (i == n) { pcount++; } else { nextEmptySq(numr, numc, row, col); int lastused = -1; for(int j=0; j