c++泛洪算法
作者:野牛程序员:2024-01-22 18:07:29 C++阅读 2922
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协议实现了一个多线程的文件互传系统
- 下一篇:详细讲解泛洪算法