蛇形填数
日期:2015-05-09 18:05:04
最后更新日期:2015-05-11 10:12:35
http://acm.nyist.net/JudgeOnline/problem.php?pid=33
描述
在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
解析:
变化的顺序是右,下,左,上,赋值后,判断当前方向上下一个位置已经被赋值过,则改变方向
[code lang="cpp"]
#include<stdio.h>
#define N 100
#define RIGHT 1
#define DOWN 2
#define LEFT 3
#define UP 4
int a[N][N]={{0}};
int sovle(int m)
{
int i=0, j=m-1, flag=RIGHT,n=1;
while( 1 )
{
a[i][j] = n++;
if (n>m*m)
{
break ;
}
switch (flag)
{
case RIGHT:
{
if (j+1<m && !a[i][j+1])
{
j++;
break;
}
flag = DOWN;
}
case DOWN:
{
if (i+1<m && !a[i+1][j])
{
i++;
break;
}
flag = LEFT;
}
case LEFT:
{
if (j-1>= 0 && !a[i][j-1])
{
j--;
break ;
}
flag = UP ;
}
case UP:
{
if (i-1>=0 && !a[i-1][j])
{
i--;
break;
}
flag = RIGHT ;
}
default:
{
if ( j+1<m && !a[i][j+1])
{
j++;
break ;
}
}
}
}
for (i=0; i<m; i++)
{
for (j=0; j<m; j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
int main(){
int n;
scanf("%d",&n);
sovle(n);
return 0;
}
[/code]