#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string.h> #define T ++k&=3 #define R p=cx+u[k+1&3],q=cy+v[k+1&3] #define C 0<=p&&p<w&&0<=q&&q<h&&!a[q*w+p] #define D p=cx+u[k],q=cy+v[k] #define G cx=p,cy=q,a[q*w+p]=++i int* buildSnailReverse(int* a, int w, int h) { memset(a,0,w*h*4); 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; int cx=w/2,cy=(h-1)/2; if(w>h) cx=cy=(h-1)/2,xs++; if(w<h) cx=cy=w/2; a[cy*w+cx]=i; while(yi++<=ys||xi++<=xs) D,G; while(i<h*w){ R; if(C) T,G,D; else{ D; if(C) G; else T,D; } } return a; } void printArray(int *a, int w, int h) { for(int y = 0; y<h; y++){ for(int x=0; x<w; x++){ printf("%3d",a[y*w + x]); } printf("\n"); }printf("\n"); } int main() { int w, h; //std::cin >> w >> h; w = 4, h = 10; int* a = new int[12 * 12]; int x,y; for(y=3;y<=10;y++) for(x=3;x<=10;x++){ buildSnailReverse(a, x, y); printArray(a, x, y); } delete[] a; return 0; }
Standard input is empty
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