#include using namespace std; /* Een veld 3,3,7,7,7,3,3 33 vakjes Vakje: 3 | 2---V---0 | 1 */ const int maxRij = 7; const int maxKolom = 7; const int maxAantal = 33; const int hulp[maxRij][2] = { { 2, 3 }, { 2, 3 }, { 0, 7 }, { 0, 7 }, { 0, 7 }, { 2, 3 }, { 2, 3 } }; int AantalZetten = 0; //omdat buren priemgetallen zijn, kan je ze bij elkaar optellen voor een //uniek getal const bool buurLinks[maxRij][maxKolom] = { { 0, 0, 0, 1, 1, 0, 0 }, { 0, 0, 0, 1, 1, 0, 0 }, { 0, 1, 1, 1, 1, 1, 1 }, { 0, 1, 1, 1, 1, 1, 1 }, { 0, 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 1, 1, 0, 0 }, { 0, 0, 0, 1, 1, 0, 0 }, }; const bool buurRechts[maxRij][maxKolom] = { { 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 1, 1, 0, 0, 0 }, { 1, 1, 1, 1, 1, 1, 0 }, { 1, 1, 1, 1, 1, 1, 0 }, { 1, 1, 1, 1, 1, 1, 0 }, { 0, 0, 1, 1, 0, 0, 0 }, { 0, 0, 1, 1, 0, 0, 0 }, }; const bool buurBoven[maxRij][maxKolom] = { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 1, 1, 0, 0 }, { 0, 0, 1, 1, 1, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 1, 1, 1, 0, 0 }, { 0, 0, 1, 1, 1, 0, 0 }, }; const bool buurBeneden[maxRij][maxKolom] = { { 0, 0, 1, 1, 1, 0, 0 }, { 0, 0, 1, 1, 1, 0, 0 }, { 1, 1, 1, 1, 1, 1, 1 }, { 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 1, 1, 1, 0, 0 }, { 0, 0, 1, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, }; class vakje { public: vakje(void) { gevuld = true; buur[0] = NULL; buur[1] = NULL; buur[2] = NULL; buur[3] = NULL; } vakje * buur[4]; bool gevuld; }; vakje * spelarray[maxRij][maxKolom]; vakje * VakjesList[maxAantal]; void maakVeld() { vakje * tmpVakje = NULL; for( int i = 0; i < maxRij; i++ ) { for( int j = 0; j < maxKolom; j++ ) { tmpVakje = new vakje; spelarray[i][j] = tmpVakje; }; }; } void maakBuren() { for( int i = 0; i < maxRij; i++ ) { for( int j = 0; j < maxKolom; j++ ) { if( buurRechts[i][j] ) { spelarray[i][j]->buur[0] = spelarray[i][j+1]; } if( buurBeneden[i][j] ) { spelarray[i][j]->buur[1] = spelarray[i-1][j]; }; if( buurLinks[i][j] ) { spelarray[i][j]->buur[2] = spelarray[i][j-1]; }; if( buurBoven[i][j] ) { spelarray[i][j]->buur[3] = spelarray[i+1][j]; }; }; }; } void initSpeelVelden() { int tmpNummer = 0; for( int i = 0; i < maxRij; i++ ) { for( int j = hulp[i][0]; j < (hulp[i][0] + hulp[i][1]); j++ ) { VakjesList[tmpNummer] = spelarray[i][j]; tmpNummer++; }; }; } void initSpel() { spelarray[3][3]->gevuld = 0; } void printVeld() { int tmpKolom = 0; for( int i = 0; i < maxRij; i++ ) { tmpKolom = 0; for( int j = 0; j < hulp[i][0]; j++ ) { cout << " "; tmpKolom++; }; for( int j = 0; j < hulp[i][1]; j++ ) { cout << spelarray[i][tmpKolom]->gevuld; tmpKolom++; }; for( int j = 0; j < (maxKolom - hulp[i][0]); j++ ) { cout << " "; }; cout << endl; }; cout << endl; } bool spelOnmogelijk() { if( (spelarray[0][2]->gevuld == 1) and (spelarray[0][3]->gevuld == 1) and (spelarray[0][4]->gevuld == 1) and (spelarray[1][2]->gevuld == 0) and (spelarray[1][3]->gevuld == 0) and (spelarray[1][4]->gevuld == 0) ) { return(true); } else { return(false); }; }; long totaal = 0; bool afgelopen = false; void doeZet() { if( spelOnmogelijk() ) { //cout << "Spel onmogelijk" << endl; return; } else if( AantalZetten == 23 ) { cout << "Test " << totaal << endl; printVeld(); //afgelopen = true; return; } else { for(int i = 0; i < maxAantal; i++) { for(int zet = 0; zet < 4; zet++) { if( VakjesList[i]->gevuld == 1 ) { if( VakjesList[i]->buur[zet] != NULL ) { if( VakjesList[i]->buur[zet]->gevuld == 1 ) { if( VakjesList[i]->buur[zet]->buur[zet] != NULL ) { if( VakjesList[i]->buur[zet]->buur[zet]->gevuld == 0 ) { VakjesList[i]->buur[zet]->buur[zet]->gevuld = 1; VakjesList[i]->buur[zet]->gevuld = 0; VakjesList[i]->gevuld = 0; AantalZetten++; totaal++; doeZet(); AantalZetten--; VakjesList[i]->buur[zet]->buur[zet]->gevuld = 0; VakjesList[i]->buur[zet]->gevuld = 1; VakjesList[i]->gevuld = 1; if( afgelopen ) { return; }; }; }; }; }; }; }; }; }; } int main () { maakVeld(); maakBuren(); initSpeelVelden(); initSpel(); doeZet(); return 0; }