fork download
  1. #include <iostream>
  2. #define MAX 17
  3.  
  4. using namespace std;
  5.  
  6. int K, x, y;
  7. int cnt = 0;
  8. int map[MAX][MAX] = {};
  9.  
  10. bool isNotHole(int x, int y, int len) {
  11. for (int i=x; i<x+len; i++) {
  12. for (int j=y; j<y+len; j++) {
  13. if(map[i][j]!=0) return false;
  14. }
  15. }
  16. return true;
  17. }
  18.  
  19. void search(int x, int y, int len) {
  20. cnt++;
  21. int halfLen = len/2;
  22.  
  23. if(isNotHole(x, y, halfLen)) map[x+halfLen-1][y+halfLen-1] = cnt;
  24. if(isNotHole(x, y+halfLen, halfLen)) map[x+halfLen-1][y+halfLen] = cnt;
  25. if(isNotHole(x+halfLen, y, halfLen)) map[x+halfLen][y+halfLen-1] = cnt;
  26. if(isNotHole(x+halfLen, y+halfLen, halfLen)) map[x+halfLen][y+halfLen] = cnt;
  27.  
  28. if(len == 2) return;
  29.  
  30. search(x, y, halfLen);
  31. search(x, y+halfLen, halfLen);
  32. search(x+halfLen, y, halfLen);
  33. search(x+halfLen, y+halfLen, halfLen);
  34.  
  35. }
  36.  
  37.  
  38. int main() {
  39.  
  40. cin >> K >> x >> y;
  41. map[y-1][x-1] = -1;
  42.  
  43. search(0, 0, (1<<K));
  44.  
  45. for(int i=0; i<(1<<K); i++) {
  46. for(int j=0; j<(1<<K); j++) {
  47. cout << map[i][j] << ' ';
  48. }
  49. cout << '\n';
  50. }
  51.  
  52. return 0;
  53. }
Success #stdin #stdout 0.01s 5420KB
stdin
3
4 5
stdout
3 3 4 4 8 8 9 9 
3 2 2 4 8 7 7 9 
5 2 6 6 10 10 7 11 
5 5 6 1 1 10 11 11 
13 13 14 -1 1 18 19 19 
13 12 14 14 18 18 17 19 
15 12 12 16 20 17 17 21 
15 15 16 16 20 20 21 21