博客
关于我
poj 2386 Lake Counting(BFS解法)
阅读量:793 次
发布时间:2023-03-03

本文共 2150 字,大约阅读时间需要 7 分钟。

为了解决这个问题,我们需要计算Farmer John的田地中有多少个连通的水池。每个水池由8方向连接的水格子构成。我们可以使用广度优先搜索(BFS)来解决这个问题。

方法思路

  • 读取输入:首先读取田地的行数N和列数M,然后读取田地的网格数据。
  • 初始化数据结构:创建一个二维数组来记录哪些格子已经被访问过。
  • 搜索算法:遍历每一个格子,如果发现一个未被访问过的水格子,就开始一次BFS,标记所有与之连通的水格子为已访问。
  • 计数结果:每次完成一次BFS后,计数器加一,最后输出计数器的值。
  • 解决代码

    #include 
    #include
    #include
    using namespace std;
    int main() {
    int n, m;
    cin >> n >> m;
    char grid[n][m];
    for (int i = 0; i < n; ++i) {
    string s;
    cin >> s;
    for (int j = 0; j < m; ++j) {
    grid[i][j] = s[j];
    }
    }
    bool visited[n][m];
    for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
    visited[i][j] = false;
    }
    }
    int dx[] = {-1, -1, -1, 0, 0, 1, 1, 1};
    int dy[] = {-1, 0, 1, -1, 1, -1, 0, 1};
    int ans = 0;
    for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
    if (!visited[i][j] && grid[i][j] == 'W') {
    queue
    > q;
    q.push({i, j});
    visited[i][j] = true;
    while (!q.empty()) {
    auto current = q.front();
    q.pop();
    int x = current.first;
    int y = current.second;
    for (int k = 0; k < 8; ++k) {
    int newx = x + dx[k];
    int newy = y + dy[k];
    if (newx >= 0 && newx < n && newy >= 0 && newy < m) {
    if (!visited[newx][newy] && grid[newx][newy] == 'W') {
    visited[newx][newy] = true;
    q.push({newx, newy});
    }
    }
    }
    }
    ans++;
    }
    }
    }
    cout << ans << endl;
    return 0;
    }

    代码解释

  • 读取输入:首先读取N和M,然后读取每行的数据并存储到二维数组grid中。
  • 初始化访问数组:创建一个二维数组visited来记录每个格子是否被访问过。
  • 定义方向数组dxdy数组分别表示格子在行和列方向上的变化,用于处理8方向的邻居。
  • 遍历每个格子:如果当前格子是水且未被访问过,就开始一次BFS。
  • BFS处理:从当前格子开始,使用队列处理所有连通的水格子,标记为已访问。
  • 计数连通水池:每次完成一次BFS后,计数器加一,最后输出计数器的值。
  • 通过这种方法,我们可以高效地计算出田地中连通的水池数量。

    转载地址:http://iyxfk.baihongyu.com/

    你可能感兴趣的文章
    Plotly 绘制表面 3D 未显示
    查看>>
    Plotly-Dash 存在未知问题并创建“加载依赖项时出错“;通过使用 Python-pandas.date_range
    查看>>
    Plotly-Dash:如何过滤具有多个数据框列的仪表板?
    查看>>
    Plotly:如何为 x 轴上的时间序列设置主要刻度线/网格线的值?
    查看>>
    Plotly:如何从 x 轴删除空日期?
    查看>>
    Plotly:如何从单条迹线制作堆积条形图?
    查看>>
    Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
    查看>>
    Plotly:如何使用 Plotly Express 组合散点图和线图?
    查看>>
    Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
    查看>>
    Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
    查看>>
    Plotly:如何使用 updatemenus 更新一个特定的跟踪?
    查看>>
    Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
    查看>>
    Plotly:如何向烛台图添加交易量
    查看>>
    Plotly:如何在 plotly express 中找到趋势线的系数?
    查看>>
    Plotly:如何在桑基图中设置节点位置?
    查看>>
    Plotly:如何处理重叠的颜色条和图例?
    查看>>
    Plotly:如何手动设置 plotly express 散点图中点的颜色?
    查看>>
    Plotly:如何结合 make_subplots() 和 ff.create_distplot()?
    查看>>
    Plotly:如何绘制累积的“步骤“;直方图?
    查看>>
    Quartz进一步学习与使用
    查看>>