fork download
  1. #include <vector>
  2. #include <iostream>
  3.  
  4. #define c(k,r,c) for(i=0;i<k;++i)v.push_back(m[r][c]);
  5. using V=std::vector<int>;void s(std::vector<V>&m,V&v,int h){int r=h,c=h,i,n=m.size(),k=n-2*h-1;if(!k)c(1,r,c)else if(k>0){c(k,r,c++)c(k,r++,c)c(k,r,c--)c(k,r--,c)s(m,v,h+1);}}
  6.  
  7. std::vector<V> x{{1, 2, 3, 4}, {12, 13, 14, 5}, {11, 16, 15, 6}, {10, 9, 8, 7}};
  8. std::vector<V> y{{1, 2, 3}, {8, 9, 4}, {7, 6, 5}};
  9. std::vector<V> z;
  10.  
  11. int main()
  12. {
  13. V v, w, t;
  14. s(x, v, 0);
  15. for (auto i : v) std::cout << i << " ";
  16. std::cout << "\n";
  17. s(y, w, 0);
  18. for (auto i : w) std::cout << i << " ";
  19. std::cout << "\n";
  20. s(z, t, 0);
  21. for (auto i : t) std::cout << i << " ";
  22. std::cout << "\n";
  23. }
  24.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 
1 2 3 4 5 6 7 8 9