c++代码实现种子递归填充算法
时间: 2024-10-12 21:04:27 浏览: 50
种子递归填充算法通常用于生成某种模式,比如格子、棋盘或其他二维图形。在C++中,这种算法通常涉及矩阵操作,可以采用模板函数和递归来实现。下面是一个简单的例子,假设我们要创建一个二维数组(矩阵),从给定的种子开始,并向周围扩散:
```cpp
#include <vector>
// 定义一个通用的递归函数模板
template <typename T>
void seed_fill(T** grid, int rows, int cols, int r, int c, T seed) {
// 确保边界范围内
if (r >= 0 && r < rows && c >= 0 && c < cols) {
grid[r][c] = seed; // 设置当前位置的值
// 递归地填充邻居
seed_fill(grid, rows, cols, r + 1, c, seed); // 上
seed_fill(grid, rows, cols, r - 1, c, seed); // 下
seed_fill(grid, rows, cols, r, c + 1, seed); // 右
seed_fill(grid, rows, cols, r, c - 1, seed); // 左
}
}
int main() {
int size = 5;
std::vector<std::vector<int>> matrix(size, std::vector<int>(size, 0));
int seed = 1;
seed_fill(matrix.data(), size, size, 0, 0, seed);
// 打印结果矩阵
for (auto& row : matrix) {
for (int val : row) {
std::cout << val << " ";
}
std::cout << "\n";
}
return 0;
}
```
在这个例子中,`seed_fill`函数接受一个指向二维数组的指针,以及行数、列数、起始坐标和种子值。它会递归地将种子值填入每个相邻的位置,直到整个区域都被填满。
阅读全文