Pagini recente » Cod sursa (job #842591) | Cod sursa (job #3292719) | Cod sursa (job #490935) | Cod sursa (job #1700669) | Cod sursa (job #2703354)
#include <stdio.h>
#define MAXN 9
#define MAXLAT 512
int nrdala;
int piata[MAXLAT][MAXLAT];
// coordonatele pomului sint relative la startl, startc - e mai simplu asa
void pavare( int startl, int startc, int n, int lpom, int cpom ) {
int l, c, lcad, ccad, curent;
if ( n > 1 ) {
curent = nrdala++; // tinem minte dala de asezat pe centru
n /= 2; // nu mai avem nevoie decit de dimensiunea pe jumate
lcad = lpom / n; // coordonata linie cadran pom - 0 sau 1
ccad = cpom / n; // coordonata coloana cadran pom - 0 sau 1
for ( l = 0; l < 2; l++ ) // parcurgem cele 4 cadrane
for ( c = 0; c < 2; c++ )
if ( l == lcad && c == ccad )
// problema care contine pomul
pavare( startl + l*n, startc + c*n, n, lpom % n, cpom % n );
else {
// problema generala, nu contine pom, pavam cu 'curent'
piata[startl + n - 1 + l][startc + n - 1 + c] = curent;
pavare( startl + l*n, startc + c*n, n, (n-1)*(1-l), (n-1)*(1-c) );
}
}
}
int main() {
FILE *fin, *fout;
int n, l, c, lat;
fin = fopen( "pav.in", "r" );
fscanf( fin, "%d%d%d", &n, &l, &c );
fclose( fin );
lat = 1;
while ( n-- > 0 )
lat *= 2;
nrdala = 1;
pavare( 0, 0, lat, l-1, c-1 );
fout = fopen( "pav.out", "w" );
for ( l = 0; l < lat; l++ ) {
for ( c = 0; c < lat; c++ )
fprintf( fout, "%d ", piata[l][c] );
fprintf( fout, "\n" );
}
fclose( fout );
return 0;
}