fork download
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. #define T ++k&=3
  7. #define R p=cx+u[k+1&3],q=cy+v[k+1&3]
  8. #define C 0<=p&&p<w&&0<=q&&q<h&&!a[q*w+p]
  9. #define D p=cx+u[k],q=cy+v[k]
  10. #define G cx=p,cy=q,a[q*w+p]=++i
  11.  
  12. int* buildSnailReverse(int* a, int w, int h)
  13. {
  14. memset(a,0,w*h*4);
  15. int xs=w>h?w-h:0,ys=h>w?h-w:0,p,q,i=1,k=w>=h?0:1,u[]={1,0,-1,0},v[]={0,1,0,-1},xi=1,yi=1;
  16. int cx=w/2,cy=(h-1)/2;
  17. if(w>h)
  18. cx=cy=(h-1)/2,xs++;
  19. if(w<h)
  20. cx=cy=w/2;
  21.  
  22. a[cy*w+cx]=i;
  23. while(yi++<=ys||xi++<=xs)
  24. D,G;
  25. while(i<h*w){
  26. R;
  27. if(C)
  28. T,G,D;
  29. else{
  30. D;
  31. if(C)
  32. G;
  33. else
  34. T,D;
  35. }
  36. }
  37. return a;
  38. }
  39.  
  40. void printArray(int *a, int w, int h)
  41. {
  42. for(int y = 0; y<h; y++){
  43. for(int x=0; x<w; x++){
  44. printf("%3d",a[y*w + x]);
  45. }
  46. printf("\n");
  47. }printf("\n");
  48. }
  49.  
  50. int main()
  51. {
  52. int w, h;
  53. //std::cin >> w >> h;
  54. w = 4, h = 10;
  55. int* a = new int[12 * 12];
  56. int x,y;
  57. for(y=3;y<=10;y++)
  58. for(x=3;x<=10;x++){
  59. buildSnailReverse(a, x, y);
  60. printArray(a, x, y);
  61. }
  62. delete[] a;
  63. return 0;
  64. }
  65.  
  66.  
Success #stdin #stdout 0s 2984KB
stdin
Standard input is empty
stdout
  5  6  7
  4  1  8
  3  2  9

  9 10 11 12
  8  1  2  3
  7  6  5  4

 11 12 13 14 15
 10  1  2  3  4
  9  8  7  6  5

 13 14 15 16 17 18
 12  1  2  3  4  5
 11 10  9  8  7  6

 15 16 17 18 19 20 21
 14  1  2  3  4  5  6
 13 12 11 10  9  8  7

 17 18 19 20 21 22 23 24
 16  1  2  3  4  5  6  7
 15 14 13 12 11 10  9  8

 19 20 21 22 23 24 25 26 27
 18  1  2  3  4  5  6  7  8
 17 16 15 14 13 12 11 10  9

 21 22 23 24 25 26 27 28 29 30
 20  1  2  3  4  5  6  7  8  9
 19 18 17 16 15 14 13 12 11 10

  5  6  7
  4  1  8
  3  2  9
 12 11 10

 16  5  6  7
 15  4  1  8
 14  3  2  9
 13 12 11 10

  9 10 11 12 13
  8  1  2  3 14
  7  6  5  4 15
 20 19 18 17 16

 11 12 13 14 15 16
 10  1  2  3  4 17
  9  8  7  6  5 18
 24 23 22 21 20 19

 13 14 15 16 17 18 19
 12  1  2  3  4  5 20
 11 10  9  8  7  6 21
 28 27 26 25 24 23 22

 15 16 17 18 19 20 21 22
 14  1  2  3  4  5  6 23
 13 12 11 10  9  8  7 24
 32 31 30 29 28 27 26 25

 17 18 19 20 21 22 23 24 25
 16  1  2  3  4  5  6  7 26
 15 14 13 12 11 10  9  8 27
 36 35 34 33 32 31 30 29 28

 19 20 21 22 23 24 25 26 27 28
 18  1  2  3  4  5  6  7  8 29
 17 16 15 14 13 12 11 10  9 30
 40 39 38 37 36 35 34 33 32 31

  7  8  9
  6  1 10
  5  2 11
  4  3 12
 15 14 13

 17 18 19 20
 16  5  6  7
 15  4  1  8
 14  3  2  9
 13 12 11 10

 17 18 19 20 21
 16  5  6  7 22
 15  4  1  8 23
 14  3  2  9 24
 13 12 11 10 25

 25 26 27 28 29 30
 24  9 10 11 12 13
 23  8  1  2  3 14
 22  7  6  5  4 15
 21 20 19 18 17 16

 29 30 31 32 33 34 35
 28 11 12 13 14 15 16
 27 10  1  2  3  4 17
 26  9  8  7  6  5 18
 25 24 23 22 21 20 19

 33 34 35 36 37 38 39 40
 32 13 14 15 16 17 18 19
 31 12  1  2  3  4  5 20
 30 11 10  9  8  7  6 21
 29 28 27 26 25 24 23 22

 37 38 39 40 41 42 43 44 45
 36 15 16 17 18 19 20 21 22
 35 14  1  2  3  4  5  6 23
 34 13 12 11 10  9  8  7 24
 33 32 31 30 29 28 27 26 25

 41 42 43 44 45 46 47 48 49 50
 40 17 18 19 20 21 22 23 24 25
 39 16  1  2  3  4  5  6  7 26
 38 15 14 13 12 11 10  9  8 27
 37 36 35 34 33 32 31 30 29 28

  9 10 11
  8  1 12
  7  2 13
  6  3 14
  5  4 15
 18 17 16

 21 22 23 24
 20  7  8  9
 19  6  1 10
 18  5  2 11
 17  4  3 12
 16 15 14 13

 17 18 19 20 21
 16  5  6  7 22
 15  4  1  8 23
 14  3  2  9 24
 13 12 11 10 25
 30 29 28 27 26

 36 17 18 19 20 21
 35 16  5  6  7 22
 34 15  4  1  8 23
 33 14  3  2  9 24
 32 13 12 11 10 25
 31 30 29 28 27 26

 25 26 27 28 29 30 31
 24  9 10 11 12 13 32
 23  8  1  2  3 14 33
 22  7  6  5  4 15 34
 21 20 19 18 17 16 35
 42 41 40 39 38 37 36

 29 30 31 32 33 34 35 36
 28 11 12 13 14 15 16 37
 27 10  1  2  3  4 17 38
 26  9  8  7  6  5 18 39
 25 24 23 22 21 20 19 40
 48 47 46 45 44 43 42 41

 33 34 35 36 37 38 39 40 41
 32 13 14 15 16 17 18 19 42
 31 12  1  2  3  4  5 20 43
 30 11 10  9  8  7  6 21 44
 29 28 27 26 25 24 23 22 45
 54 53 52 51 50 49 48 47 46

 37 38 39 40 41 42 43 44 45 46
 36 15 16 17 18 19 20 21 22 47
 35 14  1  2  3  4  5  6 23 48
 34 13 12 11 10  9  8  7 24 49
 33 32 31 30 29 28 27 26 25 50
 60 59 58 57 56 55 54 53 52 51

 11 12 13
 10  1 14
  9  2 15
  8  3 16
  7  4 17
  6  5 18
 21 20 19

 25 26 27 28
 24  9 10 11
 23  8  1 12
 22  7  2 13
 21  6  3 14
 20  5  4 15
 19 18 17 16

 21 22 23 24 25
 20  7  8  9 26
 19  6  1 10 27
 18  5  2 11 28
 17  4  3 12 29
 16 15 14 13 30
 35 34 33 32 31

 37 38 39 40 41 42
 36 17 18 19 20 21
 35 16  5  6  7 22
 34 15  4  1  8 23
 33 14  3  2  9 24
 32 13 12 11 10 25
 31 30 29 28 27 26

 37 38 39 40 41 42 43
 36 17 18 19 20 21 44
 35 16  5  6  7 22 45
 34 15  4  1  8 23 46
 33 14  3  2  9 24 47
 32 13 12 11 10 25 48
 31 30 29 28 27 26 49

 49 50 51 52 53 54 55 56
 48 25 26 27 28 29 30 31
 47 24  9 10 11 12 13 32
 46 23  8  1  2  3 14 33
 45 22  7  6  5  4 15 34
 44 21 20 19 18 17 16 35
 43 42 41 40 39 38 37 36

 55 56 57 58 59 60 61 62 63
 54 29 30 31 32 33 34 35 36
 53 28 11 12 13 14 15 16 37
 52 27 10  1  2  3  4 17 38
 51 26  9  8  7  6  5 18 39
 50 25 24 23 22 21 20 19 40
 49 48 47 46 45 44 43 42 41

 61 62 63 64 65 66 67 68 69 70
 60 33 34 35 36 37 38 39 40 41
 59 32 13 14 15 16 17 18 19 42
 58 31 12  1  2  3  4  5 20 43
 57 30 11 10  9  8  7  6 21 44
 56 29 28 27 26 25 24 23 22 45
 55 54 53 52 51 50 49 48 47 46

 13 14 15
 12  1 16
 11  2 17
 10  3 18
  9  4 19
  8  5 20
  7  6 21
 24 23 22

 29 30 31 32
 28 11 12 13
 27 10  1 14
 26  9  2 15
 25  8  3 16
 24  7  4 17
 23  6  5 18
 22 21 20 19

 25 26 27 28 29
 24  9 10 11 30
 23  8  1 12 31
 22  7  2 13 32
 21  6  3 14 33
 20  5  4 15 34
 19 18 17 16 35
 40 39 38 37 36

 43 44 45 46 47 48
 42 21 22 23 24 25
 41 20  7  8  9 26
 40 19  6  1 10 27
 39 18  5  2 11 28
 38 17  4  3 12 29
 37 16 15 14 13 30
 36 35 34 33 32 31

 37 38 39 40 41 42 43
 36 17 18 19 20 21 44
 35 16  5  6  7 22 45
 34 15  4  1  8 23 46
 33 14  3  2  9 24 47
 32 13 12 11 10 25 48
 31 30 29 28 27 26 49
 56 55 54 53 52 51 50

 64 37 38 39 40 41 42 43
 63 36 17 18 19 20 21 44
 62 35 16  5  6  7 22 45
 61 34 15  4  1  8 23 46
 60 33 14  3  2  9 24 47
 59 32 13 12 11 10 25 48
 58 31 30 29 28 27 26 49
 57 56 55 54 53 52 51 50

 49 50 51 52 53 54 55 56 57
 48 25 26 27 28 29 30 31 58
 47 24  9 10 11 12 13 32 59
 46 23  8  1  2  3 14 33 60
 45 22  7  6  5  4 15 34 61
 44 21 20 19 18 17 16 35 62
 43 42 41 40 39 38 37 36 63
 72 71 70 69 68 67 66 65 64

 55 56 57 58 59 60 61 62 63 64
 54 29 30 31 32 33 34 35 36 65
 53 28 11 12 13 14 15 16 37 66
 52 27 10  1  2  3  4 17 38 67
 51 26  9  8  7  6  5 18 39 68
 50 25 24 23 22 21 20 19 40 69
 49 48 47 46 45 44 43 42 41 70
 80 79 78 77 76 75 74 73 72 71

 15 16 17
 14  1 18
 13  2 19
 12  3 20
 11  4 21
 10  5 22
  9  6 23
  8  7 24
 27 26 25

 33 34 35 36
 32 13 14 15
 31 12  1 16
 30 11  2 17
 29 10  3 18
 28  9  4 19
 27  8  5 20
 26  7  6 21
 25 24 23 22

 29 30 31 32 33
 28 11 12 13 34
 27 10  1 14 35
 26  9  2 15 36
 25  8  3 16 37
 24  7  4 17 38
 23  6  5 18 39
 22 21 20 19 40
 45 44 43 42 41

 49 50 51 52 53 54
 48 25 26 27 28 29
 47 24  9 10 11 30
 46 23  8  1 12 31
 45 22  7  2 13 32
 44 21  6  3 14 33
 43 20  5  4 15 34
 42 19 18 17 16 35
 41 40 39 38 37 36

 43 44 45 46 47 48 49
 42 21 22 23 24 25 50
 41 20  7  8  9 26 51
 40 19  6  1 10 27 52
 39 18  5  2 11 28 53
 38 17  4  3 12 29 54
 37 16 15 14 13 30 55
 36 35 34 33 32 31 56
 63 62 61 60 59 58 57

 65 66 67 68 69 70 71 72
 64 37 38 39 40 41 42 43
 63 36 17 18 19 20 21 44
 62 35 16  5  6  7 22 45
 61 34 15  4  1  8 23 46
 60 33 14  3  2  9 24 47
 59 32 13 12 11 10 25 48
 58 31 30 29 28 27 26 49
 57 56 55 54 53 52 51 50

 65 66 67 68 69 70 71 72 73
 64 37 38 39 40 41 42 43 74
 63 36 17 18 19 20 21 44 75
 62 35 16  5  6  7 22 45 76
 61 34 15  4  1  8 23 46 77
 60 33 14  3  2  9 24 47 78
 59 32 13 12 11 10 25 48 79
 58 31 30 29 28 27 26 49 80
 57 56 55 54 53 52 51 50 81

 81 82 83 84 85 86 87 88 89 90
 80 49 50 51 52 53 54 55 56 57
 79 48 25 26 27 28 29 30 31 58
 78 47 24  9 10 11 12 13 32 59
 77 46 23  8  1  2  3 14 33 60
 76 45 22  7  6  5  4 15 34 61
 75 44 21 20 19 18 17 16 35 62
 74 43 42 41 40 39 38 37 36 63
 73 72 71 70 69 68 67 66 65 64

 17 18 19
 16  1 20
 15  2 21
 14  3 22
 13  4 23
 12  5 24
 11  6 25
 10  7 26
  9  8 27
 30 29 28

 37 38 39 40
 36 15 16 17
 35 14  1 18
 34 13  2 19
 33 12  3 20
 32 11  4 21
 31 10  5 22
 30  9  6 23
 29  8  7 24
 28 27 26 25

 33 34 35 36 37
 32 13 14 15 38
 31 12  1 16 39
 30 11  2 17 40
 29 10  3 18 41
 28  9  4 19 42
 27  8  5 20 43
 26  7  6 21 44
 25 24 23 22 45
 50 49 48 47 46

 55 56 57 58 59 60
 54 29 30 31 32 33
 53 28 11 12 13 34
 52 27 10  1 14 35
 51 26  9  2 15 36
 50 25  8  3 16 37
 49 24  7  4 17 38
 48 23  6  5 18 39
 47 22 21 20 19 40
 46 45 44 43 42 41

 49 50 51 52 53 54 55
 48 25 26 27 28 29 56
 47 24  9 10 11 30 57
 46 23  8  1 12 31 58
 45 22  7  2 13 32 59
 44 21  6  3 14 33 60
 43 20  5  4 15 34 61
 42 19 18 17 16 35 62
 41 40 39 38 37 36 63
 70 69 68 67 66 65 64

 73 74 75 76 77 78 79 80
 72 43 44 45 46 47 48 49
 71 42 21 22 23 24 25 50
 70 41 20  7  8  9 26 51
 69 40 19  6  1 10 27 52
 68 39 18  5  2 11 28 53
 67 38 17  4  3 12 29 54
 66 37 16 15 14 13 30 55
 65 36 35 34 33 32 31 56
 64 63 62 61 60 59 58 57

 65 66 67 68 69 70 71 72 73
 64 37 38 39 40 41 42 43 74
 63 36 17 18 19 20 21 44 75
 62 35 16  5  6  7 22 45 76
 61 34 15  4  1  8 23 46 77
 60 33 14  3  2  9 24 47 78
 59 32 13 12 11 10 25 48 79
 58 31 30 29 28 27 26 49 80
 57 56 55 54 53 52 51 50 81
 90 89 88 87 86 85 84 83 82

100 65 66 67 68 69 70 71 72 73
 99 64 37 38 39 40 41 42 43 74
 98 63 36 17 18 19 20 21 44 75
 97 62 35 16  5  6  7 22 45 76
 96 61 34 15  4  1  8 23 46 77
 95 60 33 14  3  2  9 24 47 78
 94 59 32 13 12 11 10 25 48 79
 93 58 31 30 29 28 27 26 49 80
 92 57 56 55 54 53 52 51 50 81
 91 90 89 88 87 86 85 84 83 82