回形针填数
2017-10-07 10:45
453 查看
蛇形填数
时间限制: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
来源
算法经典
上传者
首席执行官
思路:
定义一个二维数组,进行初始化为0,通过四个 for 循环(最上行,最下行,最左列,最右列)分别进行赋值。最重要的就是 判断条件:
该位置的下一个元素为零,则到达边界。
代码:
#include <stdio.h>
int main( void ){
int i, j, n;
while(~scanf("%d", &n )){
int a
;
for(i = 0;i < n;i ++)
for(j = 0;j < n;j ++)
a[i][j] = 0;
int k = 0;
i = -1;
j = n - 1;
while(k < n*n ){ / / 全体 whlie 的一个判断条件:该位置的下一个元素为零则继续while循环
while(i < n-1&& !a[i+1][j]) / /最右列,i : 0 ~ n-1
a[++i][j] = ++k;
while(j >= 1&& !a[i][j-1]) / / 最下行 j : n-1 ~ 1
a[i][--j] = ++k;
while(i >= 1&& !a[i-1][j]) / / 最左列 i : n-1 ~ 1
a[--i][j] = ++k;
while(j < n-1&& !a[i][j+1]) / / 最上行 j : 1 ~ n-1
a[i][++j] = ++k;
}
for(i = 0;i < n;i ++){
for(j = 0;j < n;j ++){
printf("%d ",a[i][j]);
}
printf("\n");
}
}
return 0;
}