fork(1) download
  1. #include <vector>
  2. #include <iostream>
  3.  
  4. using V=std::vector<int>;void s(std::vector<V>&m,V&v,int n,int h){int r=h,c=h,i=0,j,l=n-2*h-1;if(l>-1){do{v.push_back(m[r][c]);l?(j=i/l)<1?c++:j<2?r++:j<3?c--:r--:l;}while(++i<4*l);s(m,v,n,h+1);}}
  5.  
  6. std::vector<V> x{{1, 2, 3, 4}, {12, 13, 14, 5}, {11, 16, 15, 6}, {10, 9, 8, 7}};
  7. std::vector<V> y{{1, 2, 3}, {8, 9, 4}, {7, 6, 5}};
  8. std::vector<V> z;
  9.  
  10. int main()
  11. {
  12. V v, w, t;
  13. s(x, v, x.size(), 0);
  14. for (auto i : v) std::cout << i << " ";
  15. std::cout << "\n";
  16. s(y, w, y.size(), 0);
  17. for (auto i : w) std::cout << i << " ";
  18. std::cout << "\n";
  19. s(z, t, z.size(), 0);
  20. for (auto i : t) std::cout << i << " ";
  21. std::cout << "\n";
  22. }
  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