Cherrycoke
Mitglied
Hallo Community,
ich komme mit meinen Aufgaben einfach nicht weiter. An folgender Aufgabe sitze ich schon seit heute morgen:
Gegeben ist ein quadrtisches Feld der Seitenlänge 2^k. Auf diesem Feld wird nun an beliebiger Stelle ein Stein platziert. Nun soll das Feld mit Ecksteinen der Größe drei gefüllt werden.
Beispiel für k = 2 und Startstein auf 1, 1:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
2 2 0 0
2 1 0 0
0 0 0 0
0 0 0 0
2 2 0 0
2 1 3 0
0 3 3 0
0 0 0 0
2 2 4 4
2 1 3 4
0 3 3 0
0 0 0 0
usw.
Bisher habe ich folgenden kleinen Algorithmus:
Mein Programm sieht bisher so aus:
Ich tüftel nun schon den ganzen Tag, wie ich den neuen Eckstein richtig setzen kann, um mit der Pflasterung fortzusetzen.
Hat da jemand eine Idee oder einen kleinen Tipp? Wäre wirklich super!
ich komme mit meinen Aufgaben einfach nicht weiter. An folgender Aufgabe sitze ich schon seit heute morgen:
Gegeben ist ein quadrtisches Feld der Seitenlänge 2^k. Auf diesem Feld wird nun an beliebiger Stelle ein Stein platziert. Nun soll das Feld mit Ecksteinen der Größe drei gefüllt werden.
Beispiel für k = 2 und Startstein auf 1, 1:
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
2 2 0 0
2 1 0 0
0 0 0 0
0 0 0 0
2 2 0 0
2 1 3 0
0 3 3 0
0 0 0 0
2 2 4 4
2 1 3 4
0 3 3 0
0 0 0 0
usw.
Bisher habe ich folgenden kleinen Algorithmus:
Code:
//Startstück suchen:
Wenn Teilstück Startstück enthält:
Solange Feldgröße > 2x2
pflastern(Quadrant1);
pflastern(Quadrant2);
pflastern(Quadrant3);
pflastern(Quadrant4);
Quadrant mit dem Startstück fertig pflastern;
Einen Eckstein in die Mitte setzen, der jeweils einen Stein in jedem der uebrigen Quadranten hat;
Mein Programm sieht bisher so aus:
C:
#include <stdio.h>
#include <stdlib.h>
int globalcount;
void feld_ausgeben(int **feld, int n)
{
int i, j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf(" %3d ",feld[i][j]);
}
printf("\n");
}
printf("\n");
}
/* Funktion zur rekursiven Pflasterung des Feldes:
x y gibt die Lage des einzelnen Steines im aktuell betrachteten Teilfeld an,
das durch mini, maxi, minj und maxj begrenzt wird. Die Pflasterung soll ueberpruefen
in welchem Quadranten sich der einzelne Stein befinden, dann in diesem Quadranten
die Pflasterung fortsetzen, einen Eckstein in die Mitte setzen, der jeweils einen Stein
in jedem der uebrigen Quadranten hat und dann mit diesem neuen Einzelstein die Pflasterung
in den anderen Quadranten fortsetzen. Verwenden Sie die lokale Kopie der globalen Variable
actglobalcount, um die Ecksteine im Feld zu markieren */
void pflastern(int mini, int maxi, int minj, int maxj, int **feld, int x, int y)
{
int actglobalcount = globalcount;
int n = maxi+1;
int h = 0;
int i,j;
globalcount++;
/* Fortsetzen der Pflasterung */
/* Noch zu implementieren! */
/* Wenn sich das Startstück in diesem Teilstück befindet setze h == 1 */
for( i = mini; i <= maxi; i++ ){
for( j = minj; j <= maxj; j++){
if( feld[i][j] == 1){
h = 1;
}
else{
}
}
}
if( h == 1 ){
if( n > 2){
pflastern(0,(n/2)-1, 0,(n/2)-1,feld,x,y);
pflastern(0,(n/2)-1, (n/2),n-1,feld,x,y);
pflastern(n/2,n-1, 0,(n/2)-1,feld,x,y);
pflastern(n/2,n-1, (n/2),n-1,feld,x,y);
}
else{
/* Startquadranten belegen */
for( i = mini; i <= maxi; i++){
for( j = minj; j <= maxj; j++){
if( feld[i][j] == 0){
feld[i][j] = 2;
}
}
}
}
}
}
int main(int argc, char *argv[])
{
int **feld;
int i, n;
int x, y;
globalcount++;
printf("Bitte geben Sie n ein: ");
scanf("%d",&n);
feld = (int**) calloc(n,sizeof(int*));
for(i=0;i<n;i++){
feld[i] = (int*) calloc(n,sizeof(int));
}
printf("Bitte geben Sie die Koordinaten des Startsteins an: ");
scanf("%d %d", &x, &y);
feld[x][y] = globalcount;
globalcount++;
pflastern(0,n-1,0,n-1,feld,x,y);
feld_ausgeben(feld,n);
free(feld);
return 0;
}
Ich tüftel nun schon den ganzen Tag, wie ich den neuen Eckstein richtig setzen kann, um mit der Pflasterung fortzusetzen.
Hat da jemand eine Idee oder einen kleinen Tipp? Wäre wirklich super!