AC(这题就是烦)

 •  17天前


#include <bits/stdc++.h>
using namespace std;

int n, a[45][45] = {0};

struct node {
	int x = 0;
	int y = 0;
} arr[16000];

int main() {
	cin >> n;

	a[1][n / 2 + 1] = 1;
	arr[1].x = 1;
	arr[1].y = n / 2 + 1;

	int sum = n * n;
	for (int i = 2; i <= sum; i++) {
		int prev_x = arr[i - 1].x;
		int prev_y = arr[i - 1].y;

		if (prev_x == 1 && prev_y != n) {
			a[n][prev_y + 1] = i;
			arr[i].x = n;
			arr[i].y = prev_y + 1;
		}

		else if (prev_y == n && prev_x != 1) {
			a[prev_x - 1][1] = i;
			arr[i].x = prev_x - 1;
			arr[i].y = 1;
		}

		else if (prev_x == 1 && prev_y == n) {
			a[2][n] = i;
			arr[i].x = 2;
			arr[i].y = n;
		}

		else {
			if (a[prev_x - 1][prev_y + 1] == 0) {

				a[prev_x - 1][prev_y + 1] = i;
				arr[i].x = prev_x - 1;
				arr[i].y = prev_y + 1;
			} else {

				a[prev_x + 1][prev_y] = i;
				arr[i].x = prev_x + 1;
				arr[i].y = prev_y;
			}
		}
	}

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			cout << a[i][j] << " ";
		}
		cout << endl;
	}

	return 0;
}

评论:

请先登录,才能进行评论