呜呜呜只有#3AC,其他RE了!
查看原帖
呜呜呜只有#3AC,其他RE了!
494699
卷王慢即快楼主2022/11/12 11:31
#include <bits/stdc++.h>
using namespace std;
struct node
{
	int x, y;
}a[50];
int n, ans[50][50];
inline void insert(int k)
{
	if(a[k - 1].x == 1 && a[k - 1].y != n) //满足条件 1 
	{
		a[k] = (node){n, a[k - 1].y + 1};
		ans[n][a[k - 1].y + 1] = k;
	}
	else //满足条件 2 
	{
		a[k] = (node){a[k - 1].x + 1, 1};
		ans[a[k - 1].x + 1][1] = k;
	}
	if(a[k - 1].x == 1 && a[k - 1].y == n) //满足条件 3 
	{
		a[k] = (node){a[k - 1].x + 1, a[k - 1].y};
		ans[a[k - 1].x + 1][a[k - 1].y] = k;
	}
	else //满足条件 4 
	{
		if(ans[a[k - 1].x - 1][a[k - 1].y + 1])
		{
			a[k] = (node){a[k - 1].x + 1, a[k - 1].y};
			ans[a[k - 1].x + 1][a[k - 1].y] = k;
		}
		else
		{
			a[k] = (node){a[k - 1].x - 1, a[k - 1].y + 1};
			ans[a[k - 1].x - 1][a[k - 1].y + 1] = k;
		}
	}
}
int main()
{
	cin >> n;
	a[1] = (node){1, n / 2 + 1}; //将1填写在第一行最中间 
	ans[1][n / 2 + 1] = 1;
	for(int k = 2; k <= n * n; k++) //枚举从2到n*n 
		insert(k); //插入k 
	for(int i = 1; i <= n; i++, puts(""))
		for(int j = 1; j <= n; j++)
			cout << ans[i][j] << " ";
	return 0;
}

wtm真是服了!

2022/11/12 11:31
加载中...