/* schachbrett.c -- Matthias Jauernig, 10.12.03 */ /* Programm simuliert ein Schachbrett von n*n Feldern und setzt zufällig */ /* k Damen darauf; dann wird errechnet, welche Damen sich gegenseitig bedrohen */ #include #include #include /* -- bedrohen() -- gibt aus, von welchen Damen die auf a[i][j] bedroht wird ---------- */ void bedrohen(short **a, const int i, const int j, const int n){ int k, l; short h; // zur Vermeidung von doppelten Einträgen werden nur die Damen betrachtet, die // weiter rechts bzw. weiter unten stehen, da die Matrix a[][] zeilenweise von // links nach rechts abgearbeitet wird; ebenso bedrohen sich nur Damen, zwischen // denen sich keine andere Dame befindet, also muss nach der ersten gefundenen // Dame in jeder Richtung Schluss sein //###################### 1.) Wird Dame horizontal bedroht? ####################### for(k=j+1, h=0; k=0 && h==0; k++, l--) if(a[k][l]==1){ printf("[%d][%d] und [%d][%d]\n", i, j, k, l); h=1; } } /* -- printline() -- gibt eine Linie für die Ausgabe des Schachbretts aus ------------- */ void printline(int fl, int n){ int i, j; printf(" "); for(i=1; i<=n; i++){ printf("+"); for(j=1; j<=fl; j++) printf("-"); } printf("+\n"); } /* -- ausg_brett() -- gibt das gesamte Brett aus -------------------------------------- */ void ausg_brett(short **a, int n){ int i, j; printf("\n "); for(i=0; i n muss größer als 0 sein!\n\n")); // zunächst Speicher für die Zeiger auf die short-Vektoren allokieren a=(short **)malloc(n*sizeof(short *)); // nun Speicher für jeden short-Vektor allokieren for(i=0; i k muss größer als 0 sein!\n\n")) || (k>n*n && printf("=> Höchstens %d Damen!\n\n", n*n))); //################################## Damen aufstellen #################################### printf("\n=> Damen befinden sich nun auf folgenden Feldern:\n"); for(i=1; i<=k; i++){ do{ // x- und y-Koordinate des Feldes zufällig wählen x=rand()%n; y=rand()%n; }while(a[x][y]==1); // wenn schon besetzt, dann erneut wählen a[x][y]=1; if(i%8==0) printf("\n"); printf("[%d][%d], ", x, y); } printf("\b\b \n\n"); if(n<19) ausg_brett(a, n); //########################### sich bedrohende Damen ausgeben ############################# printf("\n=> Felder sich bedrohender Damen:\n"); // das Array zeilenweise (i) von links nach rechts (j) durchgehen for(i=0; i Damen befinden sich nun auf folgenden Feldern: [7][8], [7][15], [8][4], [10][0], [14][8] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 0 | | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 1 | | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 2 | | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 3 | | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 4 | | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 5 | | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 6 | | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 7 | | | | | | | | | x | | | | | | | x | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 8 | | | | | x | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 9 | | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 10 | x | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 11 | | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 12 | | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 13 | | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 14 | | | | | | | | | x | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 15 | | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ => Felder sich bedrohender Damen: [7][8] und [7][15] [7][8] und [14][8] [7][15] und [14][8] #################################################################### Bedrohliche Damen ----------------- Kantenlänge des Schachbretts (Felder)?: 2 Wieviele Damen sollen sich darauf befinden?: 4 => Damen befinden sich nun auf folgenden Feldern: [0][1], [1][1], [0][0], [1][0] 0 1 +---+---+ 0 | x | x | +---+---+ 1 | x | x | +---+---+ => Felder sich bedrohender Damen: [0][0] und [0][1] [0][0] und [1][0] [0][0] und [1][1] [0][1] und [1][1] [0][1] und [1][0] [1][0] und [1][1] ####################################################################*/