nyoj_33 蛇形填数

蛇形填数

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 3
描述
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3
样例输出
7 8 1
6 9 2
5 4 3

分析:

我的方法有点蠢了,用了深搜

代码:

#include
#include
int map[105][105];
int dir[4][2]={{1,0},{0,-1},{-1,0},{0,1}};
int n;
void dfs(int x,int y,int t,int d)
{
	if(t==n*n)
		return;
	if(x+dir[d][0]>=1&&x+dir[d][0]<=n&&y+dir[d][1]>=1&&y+dir[d][1]<=n&&!map[x+dir[d][0]][y+dir[d][1]])
	{
		map[x+dir[d][0]][y+dir[d][1]]=t+1;
		dfs(x+dir[d][0],y+dir[d][1],t+1,d);
	}
	else
	{
		d=(d+1)%4;
		map[x+dir[d][0]][y+dir[d][1]]=t+1;
		dfs(x+dir[d][0],y+dir[d][1],t+1,d);
	}
}
int main()
{
	memset(map,0,sizeof(map));
	scanf("%d",&n);
	map[1][n]=1;
	dfs(1,n,1,0);
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
		if(j!=n)
			printf("%d ",map[i][j]);
		else
			printf("%d\n",map[i][j]);
	return 0;
}


你可能感兴趣的:(语言入门)