文章

239

粉丝

0

获赞

1140

访问

45.7k

头像
旋转方阵 题解:

#include<iostream>
#include<cstring>
using namespace std;

const int N=22;

int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
int n,k;
int path[N][N];
int a[N][N];

void get(int &x,int &y,int way)
{
	if(way==0)
		x++;
	else if(way==1)
		y++;
	else if(way==2)
		x--;
	else
		y--;
}

void dfs(int x,int y,int way)
{
	path[x][y]=1;
	a[x][y]=++k;
	if(k==n*n)
		return;
	int c_x=x,c_y=y;
	get(x,y,way);
	if(x<0||x>=n||y<0||y>=n||path[x][y]!=-1)
	{
		way=(way+1)%4;
		get(c_x,c_y,way);
		dfs(c_x,c_y,way);
	}
	else
		dfs(x,y,way);
	
}

int main()
{
	cin>>n;
	memset(path,-1,sizeof path);
	dfs(0,0,0);
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			printf("%-3d",a[i][j]);
			if(j!=n-1)
				printf(" ");
		}
		puts("");
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发