Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bits/stdc++.h>
- #include <string>
- using namespace std;
- #define UP_ (-1)
- #define DOWN_ (1)
- #define LEFT_ (-1)
- #define RIGHT_ (1)
- typedef vector< vector<int> > matrix;
- static int n;
- static int answ_end = 0;
- inline bool limiter(int *cp) {
- if (!((0 <= cp[0]) && (cp[0] < n)) || !((0 <= cp[1]) && (cp[1] < n)))
- return false;
- return true;
- }
- bool move_hor(int dir, int amount, int *cp, const matrix &src, vector<int> &answ) {
- for (int i = 0; i < amount; ++i) {
- cp[1] += dir;
- if (!limiter(cp))
- return false;
- answ[answ_end++] = src[cp[0]][cp[1]];
- }
- return true;
- }
- bool move_ver(int dir, int amount, int *cp, const matrix &src, vector<int> &answ) {
- for (int i = 0; i < amount; ++i) {
- cp[0] += dir;
- if (!limiter(cp))
- return false;
- answ[answ_end++] = src[cp[0]][cp[1]];
- }
- return true;
- }
- int main(int argc, char** argv) {
- scanf("%d", &n);
- matrix mtx(n, vector<int>(n));
- vector<int> answ(n*n);
- for (int i = 0; i < n; ++i)
- for (int j = 0; j < n; ++j)
- scanf("%d", &mtx[i][j]);
- int curr_pos[] = {n/2, n/2};
- answ[answ_end++] = mtx[n/2][n/2];
- int curr_ln = 1;
- while (true) {
- if (move_ver(UP_, curr_ln, curr_pos, mtx, answ)) {
- move_hor(RIGHT_, curr_ln, curr_pos, mtx, answ);
- ++curr_ln;
- move_ver(DOWN_, curr_ln, curr_pos, mtx, answ);
- move_hor(LEFT_, curr_ln, curr_pos, mtx, answ);
- ++curr_ln;
- } else {
- break;
- }
- }
- for (int i = 0; i < n*n; ++i) {
- printf("%d\n", answ[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement