#include int anzrota (int); static int karte[9][4]; /* Es gibt neun Karten mit jeweils 4 Kanten, */ static int feld [9][2]; /* Auf jedem der Felder liegt *eine* Karte und sie ist rotiert */ static int rota [4]; /* rota ist das übergabefeld zwischen anzrota und prob */ int prob(int); int main() { int i; einlesen(); auflegen(); prob(0); } int prob(int a){ int lage[4]; int w,i; if (a==9) { printf ("Lösung: \n"); feld_ausgeben(); return; } do { w=anzrota(a); for (i=0;i'9')) erfolg=0; else { erfolg=1; karte[i][j]=c-48; } } while (erfolg==0); } neubesetzen_von_stelle(int a) /* besetzt feld[a] neu und sortiert den rest */ { /* gibt zurück, ob es ging */ int b,i=0,n; int stellevon_neukarte,neue_karte; if ((a<8)&&(a>=0)){ /* Es kann vielleicht neubesetzt werden */ do { neue_karte=feld[a][0]+(++i); /* Es gibt mehrere Möglichkeiten: karte[n] ist geschützt */ if (neue_karte>8) return (0); /* wenns nicht geht, gib "nicht möglich" zurück */ stellevon_neukarte=stelle_von (neue_karte); } while (stellevon_neukarte3) && (a<9)){ /* a ist nicht: 3,6,1,2,0 aber vielleicht 4,5,7,8 */ oberkante=karte[feld[a][0]][feld[a][1]]; linkskante=karte[feld[a][0]][(feld[a][1]+3)%4]; --a; rechtskante=karte[feld[a][0]][(feld[a][1]+1)%4]; a-=2; unterkante=karte[feld[a][0]][(feld[a][1]+2)%4]; return (((linkskante+rechtskante)==10)&&((oberkante+unterkante)==10)); } else if (a==0) return 1; }