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