打印蛇形数组

唉, 不熟练连这样的题都不会入手。。

题目大概是这样 http://icpc.ahu.edu.cn/OJ/ContestProblem.aspx?cid=16&id=410
参考了 http://www.cnblogs.com/kaima/p/4773908.html

外部的 while 循环检查 number 是否到 N * N, 如果 N 为偶数则可以在这里停下, (最后四个位置刚好填完)
里面第一个 if 检查奇数 N 的情况(会填充剩下一个位置)

然后开始填充数组, 调节 x y 的坐标值填充一圈蛇形, 一圈后 x y 回归原点
缩小 size 变量
x+1, y+1 跳入内圈重复以上步骤又填充一圈, 直至跳出 while 循环

x y 走向

代码如下

#include <iostream>
using namespace std;
const int SIZE = 110;
int A[SIZE][SIZE];
int main()
{
int n;
cin >> n;
int x = 0, y = 0;
int size = n - 1;
int number = 0;
int dest = n * n;
while (number < dest)
{
if (number == dest - 1)
{
A[x][y] = number;
break;
}
/* to left, down, right, up */
for (int i = 0; i < size; ++i, ++x)
{
A[x][y] = number;
number++;
}
for (int i = 0; i < size; ++i, ++y)
{
A[x][y] = number;
number++;
}
for (int i = 0; i < size; ++i, x--)
{
A[x][y] = number;
number++;
}
for (int i = 0; i < size; ++i, y--)
{
A[x][y] = number;
number++;
}
size -= 2;
x++;
y++;
}
for (int y = 0; y < n; ++y)
{
for (int x = 0; x < n; ++x)
{
cout << A[x][y] << " ";
}
cout << endl;
}
return 0;
}