/*
蛇形填数
在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 <= 8
思路:“笔的移动轨迹是:下下下,左左左,上上上,右右,下下,左,上”
不难得出代码:
*/
#include <iostream>
#include <vector>
using namespace std;
#define MAXN 10
int a[MAXN][MAXN];
int main()
{
int n,x,y,tot = 0;
cin >> n;
memset(a,0,sizeof(a));
tot = a[x = 0][y = n - 1] = 1;
while(tot < n*n)
{
while(x+1 <n && !a[x+1][y]) a[++x][y] = ++tot;//下下下
while(y - 1 >= 0 && !a[x][y - 1]) a[x][--y] = ++tot;//左左左
while(x - 1 >= 0 && !a[x - 1][y]) a[--x][y] = ++tot;//上上上
while(y + 1 < n && !a[x][y + 1]) a[x][++y] = ++tot;//右右
}
for(x = 0; x < n; x++)
{
//输出
}
}
蛇形填数
最新推荐文章于 2022-01-21 13:45:22 发布