题目描述
给出N,要求填出N*N的蛇形矩阵
看样例就懂
样例输入
5
样例输出
25 23 22 16 15
24 21 17 14 7
20 18 13 8 6
19 12 9 5 2
11 10 4 3 1
思路
大模拟
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[105][105], n;
bool check(int x, int y)
{
if (x > n || x < 1 || y > n || y < 1) return 0;
return 1;
}//判断是否超出边界
void work(int x, int y, int now, int d)
{
a[x][y] = now;
if(a[1][1]) return;
if(d == 1)
{
if(check(x - 1, y + 1))
work(x - 1, y + 1, now + 1, d);
else {
if(check(x - 1, y))
work(x - 1, y, now + 1, 2);
else work(x, y - 1, now + 1, 2);
}
}//左往右上的情况
if(d == 2)
{
if(check(x + 1, y - 1))
work(x + 1, y - 1, now + 1, d);
else {
if(check(x, y - 1))
work(x, y - 1, now + 1, 1);
else work(x - 1, y, now + 1, 1);
}
}//右往左下的情况
}
int main()
{
freopen("snake.in", "r", stdin);
freopen("snake.out", "w", stdout);
scanf("%d", &n);
work(n, n - 2, 4, 1);
a[n][n] = 1;
a[n - 1][n] = 2;
a[n][n - 1] = 3;
for(int i = 1; i <= n; ++i) {
for(int j = 1; j <= n; ++j)
printf("%d ", a[i][j]);
printf("\n");
}
}