source: liacs/alg/solitaire/main.cc@ 297

Last change on this file since 297 was 2, checked in by Rick van der Zwet, 15 years ago

Initial import of data of old repository ('data') worth keeping (e.g. tracking
means of URL access statistics)

  • Property svn:executable set to *
File size: 4.6 KB
Line 
1#include <iostream>
2using namespace std;
3
4/*
5
6Een veld
73,3,7,7,7,3,3
833 vakjes
9
10Vakje:
11 3
12 |
132---V---0
14 |
15 1
16*/
17
18const int maxRij = 7;
19const int maxKolom = 7;
20const int maxAantal = 33;
21
22const int hulp[maxRij][2] = {
23 { 2, 3 },
24 { 2, 3 },
25 { 0, 7 },
26 { 0, 7 },
27 { 0, 7 },
28 { 2, 3 },
29 { 2, 3 }
30};
31
32int AantalZetten = 0;
33
34//omdat buren priemgetallen zijn, kan je ze bij elkaar optellen voor een
35//uniek getal
36const bool buurLinks[maxRij][maxKolom] = {
37 { 0, 0, 0, 1, 1, 0, 0 },
38 { 0, 0, 0, 1, 1, 0, 0 },
39 { 0, 1, 1, 1, 1, 1, 1 },
40 { 0, 1, 1, 1, 1, 1, 1 },
41 { 0, 1, 1, 1, 1, 1, 1 },
42 { 0, 0, 0, 1, 1, 0, 0 },
43 { 0, 0, 0, 1, 1, 0, 0 },
44};
45const bool buurRechts[maxRij][maxKolom] = {
46 { 0, 0, 1, 1, 0, 0, 0 },
47 { 0, 0, 1, 1, 0, 0, 0 },
48 { 1, 1, 1, 1, 1, 1, 0 },
49 { 1, 1, 1, 1, 1, 1, 0 },
50 { 1, 1, 1, 1, 1, 1, 0 },
51 { 0, 0, 1, 1, 0, 0, 0 },
52 { 0, 0, 1, 1, 0, 0, 0 },
53};
54const bool buurBoven[maxRij][maxKolom] = {
55 { 0, 0, 0, 0, 0, 0, 0 },
56 { 0, 0, 1, 1, 1, 0, 0 },
57 { 0, 0, 1, 1, 1, 0, 0 },
58 { 1, 1, 1, 1, 1, 1, 1 },
59 { 1, 1, 1, 1, 1, 1, 1 },
60 { 0, 0, 1, 1, 1, 0, 0 },
61 { 0, 0, 1, 1, 1, 0, 0 },
62};
63const bool buurBeneden[maxRij][maxKolom] = {
64 { 0, 0, 1, 1, 1, 0, 0 },
65 { 0, 0, 1, 1, 1, 0, 0 },
66 { 1, 1, 1, 1, 1, 1, 1 },
67 { 1, 1, 1, 1, 1, 1, 1 },
68 { 0, 0, 1, 1, 1, 0, 0 },
69 { 0, 0, 1, 1, 1, 0, 0 },
70 { 0, 0, 0, 0, 0, 0, 0 },
71};
72
73class vakje {
74 public:
75 vakje(void) {
76 gevuld = true;
77 buur[0] = NULL;
78 buur[1] = NULL;
79 buur[2] = NULL;
80 buur[3] = NULL;
81 }
82 vakje * buur[4];
83 bool gevuld;
84};
85
86vakje * spelarray[maxRij][maxKolom];
87vakje * VakjesList[maxAantal];
88
89
90void maakVeld() {
91 vakje * tmpVakje = NULL;
92 for( int i = 0; i < maxRij; i++ ) {
93 for( int j = 0; j < maxKolom; j++ ) {
94 tmpVakje = new vakje;
95 spelarray[i][j] = tmpVakje;
96 };
97 };
98}
99
100void maakBuren() {
101 for( int i = 0; i < maxRij; i++ ) {
102 for( int j = 0; j < maxKolom; j++ ) {
103 if( buurRechts[i][j] ) {
104 spelarray[i][j]->buur[0] = spelarray[i][j+1];
105 }
106 if( buurBeneden[i][j] ) {
107 spelarray[i][j]->buur[1] = spelarray[i-1][j];
108 };
109 if( buurLinks[i][j] ) {
110 spelarray[i][j]->buur[2] = spelarray[i][j-1];
111 };
112 if( buurBoven[i][j] ) {
113 spelarray[i][j]->buur[3] = spelarray[i+1][j];
114 };
115 };
116 };
117}
118
119void initSpeelVelden() {
120 int tmpNummer = 0;
121 for( int i = 0; i < maxRij; i++ ) {
122 for( int j = hulp[i][0]; j < (hulp[i][0] + hulp[i][1]); j++ ) {
123 VakjesList[tmpNummer] = spelarray[i][j];
124 tmpNummer++;
125 };
126 };
127}
128
129void initSpel() {
130 spelarray[3][3]->gevuld = 0;
131}
132
133void printVeld() {
134 int tmpKolom = 0;
135 for( int i = 0; i < maxRij; i++ ) {
136 tmpKolom = 0;
137 for( int j = 0; j < hulp[i][0]; j++ ) {
138 cout << " ";
139 tmpKolom++;
140 };
141 for( int j = 0; j < hulp[i][1]; j++ ) {
142 cout << spelarray[i][tmpKolom]->gevuld;
143 tmpKolom++;
144 };
145 for( int j = 0; j < (maxKolom - hulp[i][0]); j++ ) {
146 cout << " ";
147 };
148 cout << endl;
149 };
150 cout << endl;
151}
152
153bool spelOnmogelijk() {
154 if( (spelarray[0][2]->gevuld == 1) and
155 (spelarray[0][3]->gevuld == 1) and
156 (spelarray[0][4]->gevuld == 1) and
157 (spelarray[1][2]->gevuld == 0) and
158 (spelarray[1][3]->gevuld == 0) and
159 (spelarray[1][4]->gevuld == 0) ) {
160 return(true);
161 }
162 else {
163 return(false);
164 };
165};
166
167long totaal = 0;
168bool afgelopen = false;
169
170void doeZet() {
171 if( spelOnmogelijk() ) {
172 //cout << "Spel onmogelijk" << endl;
173 return;
174 }
175 else if( AantalZetten == 23 ) {
176 cout << "Test " << totaal << endl;
177 printVeld();
178 //afgelopen = true;
179 return;
180 }
181 else {
182 for(int i = 0; i < maxAantal; i++) {
183 for(int zet = 0; zet < 4; zet++) {
184 if( VakjesList[i]->gevuld == 1 ) {
185 if( VakjesList[i]->buur[zet] != NULL ) {
186 if( VakjesList[i]->buur[zet]->gevuld == 1 ) {
187 if( VakjesList[i]->buur[zet]->buur[zet] != NULL ) {
188 if( VakjesList[i]->buur[zet]->buur[zet]->gevuld == 0 ) {
189 VakjesList[i]->buur[zet]->buur[zet]->gevuld = 1;
190 VakjesList[i]->buur[zet]->gevuld = 0;
191 VakjesList[i]->gevuld = 0;
192 AantalZetten++;
193 totaal++;
194 doeZet();
195 AantalZetten--;
196 VakjesList[i]->buur[zet]->buur[zet]->gevuld = 0;
197 VakjesList[i]->buur[zet]->gevuld = 1;
198 VakjesList[i]->gevuld = 1;
199 if( afgelopen ) {
200 return;
201 };
202 };
203 };
204 };
205 };
206 };
207 };
208 };
209 };
210}
211
212int main () {
213 maakVeld();
214 maakBuren();
215 initSpeelVelden();
216 initSpel();
217 doeZet();
218 return 0;
219}
220
Note: See TracBrowser for help on using the repository browser.