001
18.10.2002, 13:54 Uhr
virtual
Sexiest Bit alive (Operator)
|
C++: |
#include <stdio.h>
#define BREITE 8 #define HOEHE 8
typedef int schachbrett_t[BREITE][HOEHE]; typedef char zugfolgestring_t[BREITE*HOEHE*3+1];
schachbrett_t brett; zugfolgestring_t zugfolge; int freie_felder = BREITE*HOEHE;
int teste_position( int x, int y) { return x>=0 && x<=7 && y>=0 && y<=7; }
int zug_eintragen( int x, int y) { char puffer[4]; brett[x][y] = 1; sprintf(puffer, "%c%c ", x+'A', y+'1'); strcat(zugfolge, puffer); return 0==--freie_felder; }
void zug_austragen( int x, int y) { zugfolge[strlen(zugfolge)-3] = 0; freie_felder++; brett[x][y] = 0; }
int bewege_springer( int x, int y) { static int offsets[8][2] = { {+1, -2}, {-1, -2}, {+1, +2}, {-1, +2}, {+2, -1}, {-2, -1}, {+2, +1}, {-2, +1} }; int j; int xn; int yn;
if (zug_eintragen(x,y)) return 1;
for(j=0; j<8; ++j) { xn = x+offsets[j][0]; yn = y+offsets[j][1]; if (teste_position(xn, yn) && !brett[xn][yn]) { if (bewege_springer(xn,yn)) return 1; } } zug_austragen(x, y); return 0; }
int main() { int x; int y;
printf("Das Schachbrett ist %dx%d Felder gross.\n", BREITE, HOEHE);
srand(time(NULL)); x = rand()%BREITE; y = rand()%HOEHE; printf("Anfangsposition ist %c%c\n", 'A'+x, '1'+y);
if (bewege_springer(x,y)) { printf("Eine moegliche Zugfolge ist:\n%s\n", zugfolge); }else { puts("Es scheinbt keine Loesung zu geben!"); return 1; } return 0; }
|
Allerdings: es wäre übertrieben, wenn ich sagen würde, dass das Programm bei einem 8x8 Brett schnell wäre. Jedenfalls rechnet es bereits schon seit 10 Minuten... Bei einem 4x4 Brett bekommt man die Lösung nahezu prompt. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |