例3-2 蛇形填数

问题:在n*n方阵里填入1,2,3...,n*n,要求填成蛇形。例如n=4时方阵为:

10 11 12  1

 9  16 13  2

 8  15 14  3

 7   6   5  4

算法简单分析:将右上角的1作为入口点,然后先往下走填充二维数组,接着往左,然后往上,接着往右,一直重复这个过程(直到被赋值的值到了n*n这个临界值)

代码如下:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define MAX_NUM    100
 5 
 6 int arr[MAX_NUM][MAX_NUM];
 7 
 8 int main(void)
 9 {    
10     int i, j;
11     int n = 0;
12     int tot;    
13 
14     memset(arr, 0, sizeof(arr));
15     printf("please enter a number:\n");
16     scanf("%d", &n);
17     tot = arr[i=0][j=n-1] = 1;
18 
19     while (tot < n * n)
20     {    
21         while (i+1 < n && !arr[i+1][j])     arr[++i][j] = ++tot;  //往下走赋值
22         while (j-1 >= 0 && !arr[i][j-1])    arr[i][--j] = ++tot;  //往左走赋值
23         while (i-1 >= 0 && !arr[i-1][j])    arr[--i][j] = ++tot;  //往上走赋值
24         while (j+1 < n && !arr[i][j+1])     arr[i][++j] = ++tot;  //往右走赋值
25     }
26 
27     for (i = 0; i < n; i++)
28     {
29         for (j = 0; j < n; j++)
30                 printf("%d\t", arr[i][j]);
31         printf("\n");
32     }
33     return 0;
34 }
posted on 2014-07-21 20:46  龙潜入海  阅读(78)  评论(0)    收藏  举报