fork download
  1. #define logd(x) printf(#x": %d\n", x)
  2. #define N(x) !(x%2)
  3. a,b,c,d,e,i,j,x,y,**z;
  4. p(){for(j=y;j--;)for(i=x;i--;printf("%*d%c",(int)log10(x*y)+1,z[x-i-1][y-j-1],i?32:10));}
  5. f(){
  6. if(c>0&&!d&&x-i-1==j){
  7. c=0;
  8. d=1;
  9. }
  10. else if(!c&&d>0&&x-i-1-(x<y?x%2:y%2)==y-j-1){
  11. c=-1;
  12. d=0;
  13. }
  14. else if(c<0&&!d&&i+(x<y?0:N(y))==y-j-1){
  15. c=0;
  16. d=-1;
  17. }
  18. else if(!c&&d<0&&i-(x<y?N(x):0)==j){
  19. c=1;
  20. d=0;
  21. }
  22. i+=c;
  23. j+=d;
  24. }
  25. main(){
  26. scanf("%d%d",&x,&y);
  27. z=malloc(x*4);
  28. for(i=x;i--;z[i]=malloc(y*4));
  29.  
  30. a=x/2-(x<y?0:N(x));
  31. b=y/2-(x<y?0:N(y));
  32. a=a<b?a:b;
  33. b=(a<b?a:b)-(x<y?N(x):0);
  34. c=!(x<y);
  35. d=x<y;
  36.  
  37. i=a;
  38. j=b;
  39.  
  40. for(i=a,j=b;e++<x*y;z[i][j]=e,f());
  41.  
  42. p();
  43. }
Success #stdin #stdout 0s 1924KB
stdin
4 9
stdout
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