fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. const int MAX_SIZE = 50;
  5.  
  6. int main() {
  7. int mtSize, windLine[MAX_SIZE + 1][MAX_SIZE + 1];
  8. cin >> mtSize;
  9. for (int line = 1; line <= mtSize; ++line) {
  10. for (int col = 1; col <= mtSize; ++col) {
  11. cin >> windLine[line][col];
  12. }
  13. }
  14. int lineDir = 0, colDir = 1;
  15. for (int linePos = 1, colPos = 1; linePos <= mtSize && colPos <= mtSize;) {
  16. cout << windLine[linePos][colPos] << " ";
  17. int lPlusC = linePos + colPos;
  18. if (lPlusC % 2 && ((lineDir == 0 && colDir == 1 &&
  19. lPlusC <= mtSize + 1) ||
  20. (lineDir == 1 && colDir == 0 && lPlusC >= mtSize + 1))) {
  21. lineDir = 1;
  22. colDir = -1;
  23. }
  24. if (lPlusC % 2 == 0 && ((lineDir == 0 && colDir == 1 &&
  25. lPlusC >= mtSize + 1) || (lineDir == 1 && colDir == 0 &&
  26. lPlusC <= mtSize + 1))) {
  27. lineDir = -1;
  28. colDir = 1;
  29. }
  30. if ((lineDir == 1 && colDir == -1 && lPlusC < mtSize + 1 &&
  31. colPos == 1) || (lineDir == -1 && colDir == 1 &&
  32. lPlusC >= mtSize + 1 && colPos == mtSize)) {
  33. lineDir = 1;
  34. colDir = 0;
  35. }
  36. if ((lineDir == 1 && colDir == -1 && lPlusC >= mtSize + 1 &&
  37. linePos == mtSize) || (lineDir == -1 && colDir == 1 &&
  38. lPlusC < mtSize + 1 && linePos == 1 )) {
  39. lineDir = 0;
  40. colDir = 1;
  41. }
  42. linePos += lineDir;
  43. colPos += colDir;
  44. lPlusC = linePos + colPos;
  45. }
  46. return 0;
  47. }
Success #stdin #stdout 0.01s 5264KB
stdin
4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
stdout
1 2 5 9 6 3 4 7 10 13 14 11 8 12 15 16