Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<fstream>
- #include<cstdio>
- #include<iostream>
- using namespace std;
- int k = 1;
- int M[100][100];
- void bordare(int startX, int startY, int n, int x, int y)
- {
- if (n == 1)//daca n=1 aatunci am matrice 2X2
- {
- for (int i = startX; i <= startX + 1; i++)
- for (int j = startY; j <= startY + 1; j++)
- if (i != x || j != y) M[i][j] = k;//parcurg matricea si bordez toate campurle mai putin cel pe care nu tb sa il acopar
- k++;// dupa ce am acoperit cele 3 campuri, cresc k cu o unitate - simbolizand cum ca trec la urmatoarea piesa in forma de L
- return;
- }
- int i, j, dim = (1 << (n-1));
- // dim -> lungimea laturii fiecarui sfert de matrice
- if (x < startX + dim&&y < startY + dim) //cadranul stanga-sus
- {
- M[startX + dim][startY + dim] = M[startX + dim - 1][startY + dim] = M[startX + dim][startY + dim - 1] = k++;//cele 3 puncte din celelalte 3 cadrane
- bordare(startX, startY, n - 1, x, y);//repet recursiv pt stanga sus
- bordare(startX, startY + dim, n - 1, startX + dim - 1, startY + dim);//repet recursiv pt dreapta sus
- bordare(startX + dim, startY, n - 1, startX + dim, startY + dim - 1);//repet recursiv pentru stanga jos
- bordare(startX + dim, startY + dim, n - 1, startX + dim, startY + dim);//repet recursiv pentru dreapta jos
- }
- if (x < startX + dim&&y >= startY + dim)//cadranul din dreapta sus
- {
- M[startX + dim][startY + dim] = M[startX + dim - 1][startY + dim - 1] = M[startX + dim][startY + dim - 1] = k++;
- bordare(startX, startY, n - 1, startX + dim - 1, startY + dim - 1);//repet recursiv pt stanga sus
- bordare(startX, startY + dim, n - 1, x, y);//repet recursiv pt dreapta sus
- bordare(startX + dim, startY, n - 1, startX + dim, startY + dim - 1);//repet recursiv pentru stanga jos
- bordare(startX + dim, startY + dim, n - 1, startX + dim, startY + dim);//repet recursiv pentru dreapta jos
- }
- if (x >= startX + dim&&y < startY + dim) //cadranul stanga-jos
- {
- M[startX + dim][startY + dim] = M[startX + dim - 1][startY + dim] = M[startX + dim - 1][startY + dim - 1] = k++;
- bordare(startX, startY, n - 1, startX + dim - 1, startY + dim - 1);//repet recursiv pt stanga sus
- bordare(startX, startY + dim, n - 1, startX + dim - 1, startY + dim);//repet recursiv pt dreapta sus
- bordare(startX + dim, startY, n - 1, x, y);//repet recursiv pentru stanga jos
- bordare(startX + dim, startY + dim, n - 1, startX + dim, startY + dim);//repet recursiv pentru dreapta jos
- }
- if (x >= startX + dim &&y >= startY + dim) //cadranul dreapta-jos
- {
- M[startX + dim - 1][startY + dim - 1] = M[startX + dim - 1][startY + dim] = M[startX + dim][startY + dim - 1] = k++;
- bordare(startX, startY, n - 1, startX + dim - 1, startY + dim - 1);//repet recursiv pt stanga sus
- bordare(startX, startY + dim, n - 1, startX + dim - 1, startY + dim);//repet recursiv pt dreapta sus
- bordare(startX + dim, startY, n - 1, startX + dim, startY + dim - 1);//repet recursiv pentru stanga jos
- bordare(startX + dim, startY + dim, n - 1, x , y);//repet recursiv pentru dreapta jos
- }
- }
- int main(){
- int n;
- ifstream fin("intrare.txt");
- fin >> n;
- int x, y;
- fin >> x >> y;
- bordare(0, 0, n, x,y);
- //afisare:
- for(int i=0;i<(1<<n);i++)
- { for (int j = 0; j < (1 << n); j++)
- printf("%3d", M[i][j]);
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement