#include #include #include #define UPRIGHT true #define LEFTDOWN false bool direction = UPRIGHT; bool moveNext(int* i, int* j, int n) { if (*i == n-1 && *j == n-1) { return true; } if (direction == UPRIGHT) { if (*i == 0) { direction = LEFTDOWN; if (*j == n-1) { (*i)++; } else { (*j)++; } } else if (*j == n-1) { direction = LEFTDOWN; (*i)++; } else { (*i)--; (*j)++; } return false; } else { if (*j == 0) { direction = UPRIGHT; if (*i == n-1) { (*j)++; } else { (*i)++; } } else if (*i == n-1) { direction = UPRIGHT; (*j)++; } else { (*i)++; (*j)--; } return false; } } int main() { int *matrixPtr = NULL; int n = 0; int i = 0, j = 0; scanf("%d", &n); matrixPtr = malloc(n*n); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { scanf("%d", matrixPtr + i*n + j); } } i = 0; j = 0; while (true) { printf("%d ", *(matrixPtr + i*n + j)); if (moveNext(&i, &j, n)) { break; } } printf("\n"); return 0; }