种子填充法生成一个正方形
时间: 2024-12-18 20:30:55 浏览: 0
python实现种子填充算法.zip
3星 · 编辑精心推荐
种子填充法(Seeding Fill)通常用于图像处理中的像素着色,目的是从给定的一个或多个初始点(种子)开始,按照某种规则填充整个区域,直到满足边界条件或者所有可达位置都被访问过。在二维图形中,如果你想要用C++生成一个正方形,可以通过递归的方式进行。
以下是一个简单的C++示例,使用邻域搜索(每个新填充的像素检查其相邻的四个方向)来填充一个正方形:
```cpp
#include <vector>
// 定义一个颜色类型
enum Color { BLACK, WHITE };
// 填充函数,参数为当前坐标、已填颜色和正方形的边长
void fillSquare(std::vector<std::vector<Color>>& grid, int x, int y, int size, Color seedColor) {
// 检查是否越界
if (x >= 0 && x < size && y >= 0 && y < size) {
// 如果当前位置未被填充且等于种子颜色,则改变颜色并递归填充邻居
if (grid[x][y] == BLACK) {
grid[x][y] = seedColor;
fillSquare(grid, x + 1, y, size, seedColor); // 上方
fillSquare(grid, x - 1, y, size, seedColor); // 下方
fillSquare(grid, x, y + 1, size, seedColor); // 左方
fillSquare(grid, x, y - 1, size, seedColor); // 右方
}
}
}
// 主函数,创建一个指定大小的正方形网格并填充
void generateFilledSquare(int size, Color startingColor) {
std::vector<std::vector<Color>> grid(size, std::vector<Color>(size, BLACK));
fillSquare(grid, 0, 0, size, startingColor);
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
std::cout << static_cast<char>(grid[i][j] == WHITE ? 'X' : '.'); // 使用不同字符表示黑白
}
std::cout << '\n';
}
}
int main() {
int squareSize = 5; // 示例中正方形的大小
generateFilledSquare(squareSize, WHITE); // 开始颜色为白色
return 0;
}
```
在这个例子中,`generateFilledSquare`函数首先初始化一个全黑的正方形网格,然后调用`fillSquare`函数从左上角(0,0)开始,根据给定的种子颜色(这里是白色)进行填充。运行这个程序,你会看到一个充满白色的小正方形。
阅读全文