下面是一个有趣的算法——蛇形填数的代码(来自《算法竞赛入门经典》):
#include <stdio.h>
#define MAX 10
int main()
{
int n, x=0, y=0, tot;
int arr[MAX][MAX], i, j;
//scanf("%d%d%d", &n, &x, &y); //可以输入x和y的值决定起点,默认为a[0][0]开始
scanf("%d", &n);
memset(arr, 0, sizeof(arr));
tot = arr[x][y] = 1;
while (tot < n*n) {
while ((y+1)<n && arr[x][y+1] == 0) arr[x][++y] = ++tot; //right
while ((x+1)<n && arr[x+1][y] == 0) arr[++x][y] = ++tot; //down
while ((y-1)>=0 && arr[x][y-1] == 0) arr[x][--y] = ++tot; //left
while ((x-1)>=0 && arr[x-1][y] == 0) arr[--x][y] = ++tot; //up
}
for (x=0; x<n; x++) { //打印出填了数的矩阵
for (y=0; y<n; y++)
printf("%4d ", arr[x][y]);
printf("\n");
}
}
运行结果:
5
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
^_^ THE END