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 linePos = 1, colPos = 1, lPlusC = linePos + colPos;
  15. int lineDir = -1, colDir = 1;
  16. for (int i = 1, j = 1; i <= mtSize || j <= mtSize;) {
  17. cout << windLine[linePos][colPos] << " ";
  18. if (lPlusC % 2) {
  19. if ((lineDir == 0 && colDir == 1 && lPlusC <= mtSize + 1) ||
  20. (lineDir == 1 && colDir == 0 && lPlusC >= mtSize + 1)) {
  21. lineDir = 1;
  22. colDir = -1;
  23. }
  24. } else {
  25. if ((lineDir == 0 && colDir == 1 && lPlusC >= mtSize + 1) ||
  26. (lineDir == 1 && colDir == 0 && lPlusC <= mtSize + 1)) {
  27. lineDir = -1;
  28. colDir = 1;
  29. }
  30. }
  31. if ((lineDir == 1 && colDir == -1 && lPlusC < mtSize + 1 && colPos == 1) ||
  32. (lineDir == -1 && colDir == 1 && lPlusC >= mtSize + 1 && colPos == mtSize)) {
  33. lineDir = 1;
  34. colDir = 0;
  35. }
  36. if ((lineDir == 1 && colDir == -1 && lPlusC >= mtSize + 1 && linePos == mtSize) ||
  37. (lineDir == -1 && colDir == 1 && lPlusC < mtSize + 1 && linePos == 1)) {
  38. lineDir = 0;
  39. colDir = 1;
  40. }
  41. linePos += lineDir;
  42. colPos += colDir;
  43. lPlusC = linePos + colPos;
  44. if (colPos > mtSize) {
  45. colPos = ++j;
  46. linePos = 1;
  47. lPlusC = linePos + colPos;
  48. }
  49. if (linePos > mtSize) {
  50. linePos = ++i;
  51. colPos = 1;
  52. lPlusC = linePos + colPos;
  53. }
  54. }
  55. return 0;
  56. }
  57.  
Success #stdin #stdout 0.01s 5284KB
stdin
Standard input is empty
stdout
Standard output is empty