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

Last change on this file since 7 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.