导航

NYOJ 33-蛇形填数

Posted on 2013-07-27 00:30  勇敢的炮灰  阅读(119)  评论(0)    收藏  举报

点击打开链接

蛇形填数

时间限制: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

没什么太多的技巧,就是一个模拟解决的,我是写了4个函数,现在想想还有更简单的办法,当时想复杂了,水平有限嘛

 
#include<stdio.h>
int array[100][100] = {0};
int up();
void left();
void right();
int down();
int num = 1 , x , y , n;

int main()
{
	scanf("%d" , &n);
	for(y = n - 1; ;)
	{
		if(down() == 1)
			break;
		y--;
		left();
		x--;
		if(up() == 1)
			break;
		y++;
		right();
		x++;

	}
	for(x = 0 ; x < n ; x++)
	{
		for(y = 0 ; y < n ; y++)
			printf("%d " , array[x][y]);
		printf("\n");
	}
	return 0;
}
int up()
{
	int i;

	for(i = x ; array[x][y] == 0 && x >= 0 ; x --)
	{
		array[x][y] = num++;
	}
	x++;
	if(array[x][y + 1] != 0)
		return 1;
	else
		return 0;
}
void left()
{
	int i; 
	for(i = y ; array[x][y] == 0 && y >= 0 ; y--)
	{
		array[x][y] = num ++;
	}
	y++;
}
void right()
{
	int i;
	for(i = y ; array[x][y] ==0 && y < n ; y++)
	{
		array[x][y] = num++;
	}
	y--;
}
int down()
{
	int i;
	for(i = x ; array[x][y] == 0 && x < n ; x++)
	{
		array[x][y] = num++;
	}
	x--;
	if(y == 0 || array[x][y - 1] != 0 )
		return 1;
	else
		return 0;
}