c++泛洪算法
作者:野牛程序员:2024-01-22 18:07:29 C++阅读 3294
C++中的泛洪算法是一种图算法,通常用于在图中查找连通区域或路径。这种算法的核心思想是从给定的起始点开始,通过不断扩展当前位置的方式,探索图中的其他节点。泛洪算法使用队列来管理待访问的节点,确保每个节点都被遍历一次且仅一次。
以下是一个简单的C++示例,演示了泛洪算法的基本实现:
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
// 定义图的大小
const int ROWS = 5;
const int COLS = 5;
// 定义四个方向的移动
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
// 泛洪算法函数
void floodFill(vector<vector<char>>& grid, int startX, int startY) {
// 使用队列来管理待访问的节点
queue<pair<int, int>> q;
q.push({startX, startY});
// 标记起始点为已访问
grid[startX][startY] = 'X';
while (!q.empty()) {
// 获取当前节点的坐标
int x = q.front().first;
int y = q.front().second;
q.pop();
// 遍历四个方向
for (int i = 0; i < 4; ++i) {
int nx = x + dx[i];
int ny = y + dy[i];
// 检查新坐标是否在图的范围内且未访问
if (nx >= 0 && nx < ROWS && ny >= 0 && ny < COLS && grid[nx][ny] == 'O') {
// 标记节点为已访问
grid[nx][ny] = 'X';
// 将新节点加入队列,以便后续遍历
q.push({nx, ny});
}
}
}
}
int main() {
// 示例图的初始化
vector<vector<char>> grid = {
{'O', 'O', 'O', 'O', 'X'},
{'O', 'O', 'X', 'O', 'X'},
{'X', 'X', 'X', 'O', 'O'},
{'O', 'X', 'O', 'O', 'O'},
{'X', 'X', 'O', 'X', 'X'}
};
// 起始点坐标
int startX = 0;
int startY = 0;
// 调用泛洪算法
floodFill(grid, startX, startY);
// 打印结果
for (int i = 0; i < ROWS; ++i) {
for (int j = 0; j < COLS; ++j) {
cout << grid[i][j] << ' ';
}
cout << endl;
}
return 0;
}请注意,此示例中使用字符 'O' 表示未访问的节点,字符 'X' 表示已访问的节点。也可以根据实际需求修改表示节点状态的字符。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:QT中c++利用TCP协议实现了一个多线程的文件互传系统
- 下一篇:详细讲解泛洪算法
