当前位置:首页 C++ > 正文

c++泛洪算法

作者:野牛程序员:2024-01-22 18:07:29 C++阅读 2167

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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击