博客
关于我
leetcode------130. 被围绕的区域【1】
阅读量:203 次
发布时间:2019-02-28

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

为了解决这个问题,我们需要找到所有被 'X' 围绕的区域,并将这些区域内的 'O' 填充为 'X'。边界上的 'O' 不会被填充,因为它们无法被 'X' 围绕。

方法思路

我们可以使用广度优先搜索(BFS)来解决这个问题。具体步骤如下:

  • 标记边界的 'O':首先,我们标记所有位于矩阵边界的 'O',这些 'O' 不会被填充,因为它们无法被 'X' 围绕。
  • BFS 遍历:然后,我们从这些边界的 'O' 开始,使用 BFS 遍历所有与这些边界 'O' 相连的 'O'。这些 'O' 也不会被填充,因为它们可以逃脱到边界。
  • 填充内部 'O':剩下的未被访问过的内部 'O' 会被填充为 'X',因为它们无法逃脱到边界。
  • 解决代码

    #include 
    #include
    using namespace std;void solve(vector
    > &board) { int n = board.size(); if (n == 0) return; int m = board[0].size(); vector
    > visited(n, vector
    (m, false)); queue
    > q; // 初始化边界的'O' for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (i == 0 || i == n-1 || j == 0 || j == m-1) { if (board[i][j] == 'O') { visited[i][j] = true; q.push({i, j}); } } } } // 四个方向:上下左右 int dirs[4][2] = {{-1,0}, {1,0}, {0,-1}, {0,1}}; while (!q.empty()) { auto current = q.front(); q.pop(); int x = current.first; int y = current.second; for (int d = 0; d < 4; ++d) { int nx = x + dirs[d][0]; int ny = y + dirs[d][1]; if (nx >= 0 && nx < n && ny >=0 && ny < m) { if (board[nx][ny] == 'O' && !visited[nx][ny]) { visited[nx][ny] = true; q.push({nx, ny}); } } } } // 填充内部未被访问的'O' for (int i=0; i

    代码解释

  • 初始化边界 'O':我们遍历矩阵的边界,标记所有 'O' 并将它们加入队列。
  • BFS 遍历:从队列中取出元素,检查其四个邻居。如果邻居是 'O' 且未被访问过,则标记并加入队列。
  • 填充内部 'O':遍历整个矩阵,未被访问过的内部 'O' 被填充为 'X'。
  • 这种方法确保了所有无法逃脱到边界的 'O' 被正确填充为 'X',同时边界上的 'O' 保持不变。

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

    你可能感兴趣的文章
    PHP -算法-二路归并
    查看>>
    php 2条不一样 的json数据 怎么放在一个json里面_如果你是PHP开发者,请务必了解一下Composer...
    查看>>
    php 360 不记住密码,JavaScript_多种方法实现360浏览器下禁止自动填写用户名密码,目前开发一个项目遇到一个很 - phpStudy...
    查看>>
    regExp的match、exec、test区别
    查看>>
    php 404 自定义,APACHE 自定义404错误页面设置方法
    查看>>
    PHP 5.3.0以上推荐使用mysqlnd驱动
    查看>>
    php aes sha1解密,PHP AES加密/解密
    查看>>
    php CI框架单个file表单多文件上传例子
    查看>>
    php composer
    查看>>
    reflow和repaint引发的性能问题
    查看>>
    php csv 导出
    查看>>
    php curl 实例+详解
    查看>>
    php curl_init函数用法(http://blog.sina.com.cn/s/blog_640738130100tsig.html)
    查看>>
    php curl_multi批量发送http请求
    查看>>
    PHP curl请求错误汇总和解决方案
    查看>>
    php echo 输出 锘?... 乱码问题
    查看>>
    PHP empty、isset、isnull的区别
    查看>>
    ReferenceQueue的使用
    查看>>
    PHP FastCGI进程管理器PHP-FPM的架构
    查看>>
    php flush()刷新不能输出缓冲的原因分析
    查看>>