K11548 蛇形填数(回形填数)c++代码
时间: 2023-07-09 19:27:48 浏览: 228
蛇形填数的C语言实现.cpp
5星 · 资源好评率100%
以下是一个简单的 C++ 实现蛇形填数(回形填数)问题的代码:
```c++
#include <iostream>
using namespace std;
const int MAXN = 100;
int a[MAXN][MAXN];
int n;
void snake(int x, int y, int num, int t) {
if (num > n * n) return;
a[x][y] = num;
if (t == 1) {
if (y == n || a[x][y+1] != 0) {
t = 2;
snake(x+1, y, num+1, t);
} else {
snake(x, y+1, num+1, t);
}
} else if (t == 2) {
if (x == n || a[x+1][y] != 0) {
t = 3;
snake(x, y-1, num+1, t);
} else {
snake(x+1, y, num+1, t);
}
} else if (t == 3) {
if (y == 1 || a[x][y-1] != 0) {
t = 4;
snake(x-1, y, num+1, t);
} else {
snake(x, y-1, num+1, t);
}
} else {
if (x == 1 || a[x-1][y] != 0) {
t = 1;
snake(x, y+1, num+1, t);
} else {
snake(x-1, y, num+1, t);
}
}
}
int main() {
cin >> n;
snake(1, 1, 1, 1);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cout << a[i][j] << "\t";
}
cout << endl;
}
return 0;
}
```
代码中的 `a` 数组用来保存填入的数字,`n` 表示矩阵的大小,`snake` 函数用来递归实现蛇形填数的过程,`t` 表示当前的填数方向。
阅读全文