70分求助
查看原帖
70分求助
1160843
wuyu6688楼主2025/6/18 22:32
#include<bits/stdc++.h>
using namespace std;
char b[1000][1000];
char mapp[10000];
int a[1000][1000];
int main(){
	int d,c;
	cin>>d;
	for(int i=1;i<=d;i++)
	{
		for(int j=1;j<=d;j++)
		{
			cin>>b[i][j];
		}
	}
	int u,o,sum=d*d;
	int t=1;
	for(int i=1;i<=sum;i++)
	{
		u=i;
		o=1;
		while(u>o)
		{
			u-=o;
			o++;
		}		
		if(o%2==0)
		{
			if(u>d||o+1-u>d)
			{
				sum++;
				continue;
			}
			mapp[t]=b[u][o+1-u];
			t++;
		}
		else
		{
			if(o+1-u>d||u>d)
			{
				sum++;
				continue;
			}
			mapp[t]=b[o+1-u][u];
			t++;
		}
	}
	int cnt = 1;
	int x = 1, y = 1;
	a[1][1]=1;
	while(cnt < d * d)
	{
		while(y + 1 <= d && a[x][y + 1] == 0)
		{
			a[x][++y] = ++cnt;
		}
		while(x + 1 <= d && a[x + 1][y] == 0)
		{
			a[++x][y] = ++cnt;
		}
		while(y - 1 >= 1 && a[x][y - 1] == 0)
		{
			a[x][--y] = ++cnt;
		}
		while(x - 1 >= 1 && a[x - 1][y] == 0)
		{
			a[--x][y] = ++cnt;
		}
	}
	for(int i = 1; i <= d; i++)
	{
		for(int j = 1; j <= d; j++)
		{
			cout  << mapp[a[i][j]];
		}
		cout << endl;
	}
	return 0;
}

2025/6/18 22:32
加载中...