方板围棋吃子换001

2023-11-18

1、描述

130给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。

找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。

示例:

X X X X
X O O X
X X O X
X O X X
运行你的函数后,矩阵变为:

X X X X
X X X X
X X X X
X O X X

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/surrounded-regions
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2、关键字

二维矩阵、连通到边,和在内部

3、思路

bfs,并查集(目前还不熟)

4、notes

1、BFS这个题一层是外圈的一层,向内圈卷,
2、bfs的第3步中内层循环时,变ke成了 队列元素向4个方向搜索,
3、陆地填海的方向方式,用一维数组{0,1,0,-1,0}完成方向初始化
4、pair<int,int>结构,在queue中可以直接用que.emplace(1,2),来添加值,下面等价

que.emplace(i,0);
que.push({i,0});

5、复杂度

时间:O(n*M),行数和列数,最多遍历一次,
空间:O(n×m),其中 n 和 m 分别为矩阵的行数和列数。主要为广度优先搜索的队列的开销。

6、code

class Solution {
public:

        const int direct[5]={0,1,0,-1,0};  //方向

    void solve(vector<vector<char>>& board) {
        int n=board.size();
        if(n==0) return;
        int m=board[0].size();
        //const int direct[5]={0,1,0,-1,0};  //方向写这里也能行
        queue<pair<int,int>>que;
       
        //int i,j;
        for(int i=0;i<n;i++){  // 初始化que队列,
            if(board[i][0]=='O')  // 遍历第一列
            {
                que.emplace(i,0);
                //board[i][0]='A';  //从这里开始修改也行,不过放到从队列里删除的时候再修改也行
            }
            if(board[i][m-1]=='O')  // 遍历最后一列
            {
                que.emplace(i,m-1);
                //board[i][m-1]='A';
            }
        }

        for(int i=1;i<m-1;i++){  // 此处写成 ;i<m; 也能行
            if(board[0][i]=='O')  // 遍历第一行
            {
                que.emplace(0,i);
                //board[0][i]='A';
            }
            if(board[n-1][i]=='O')  // 遍历最后一行
            {
                que.emplace(n-1,i);
                //board[n-1][i]='A';
            }
        }

        while(!que.empty())  // 2、外层循环
        {
            //int longth=que.size();
            //while(longth--){   // 不必这样内层循环,内层循环变成了当前节点的4个方向
                auto tem=que.front();  //  一样获取队首元    
                que.pop();  // 一样删除队首元
                int x=tem.first;
                int y=tem.second;
                board[x][y]='A';  // 此处一起修改当前的元素

                for(int i=0;i<4;i++)  // 3 、内层循环
                {
                    int nx=x+direct[i];
                    int ny=y+direct[i+1];
                    if(nx<0||nx>=n || ny<0 || ny>=m || board[nx][ny]!='O')
                    continue;
                    que.emplace(nx,ny);
                    //board[nx][ny]='A'; // 此处写了也不错,不过也可以不写,在从队列中删除的时候一起修改就行了
                }
            //}
        }

        for(int i=0;i<n;i++)  // 遍历整个board,相应修改
        {
            for(int j=0;j<m;j++)
            {                          
                if(board[i][j]=='O')
                board[i][j]='X';
                if(board[i][j]=='A')
                board[i][j]='O';
            }
        }
        
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

方板围棋吃子换001 的相关文章

  • 计蒜客-蒜头君回家(bfs)

    蒜头君要回家 xff0c 但是他家的钥匙在他的朋友花椰妹手里 xff0c 他要先从花椰妹手里取得钥匙才能回到家 花椰妹告诉他 xff1a 你家的钥匙被我复制了很多个 xff0c 分别放在不同的地方 蒜头君希望能尽快回到家中 xff0c 他需
  • C/C++无向图的遍历(bfs和dfs)

    描述 简单介绍一下图 xff0c 图就是由一些小圆点 xff08 称为顶点 xff09 和连接这些小圆点的直线 xff08 称为边 xff09 组成的 例如下图的由五个顶点 xff08 编号1 2 3 4 5 xff09 和五条边 xff0
  • 【leetcode】44. 通配符匹配(wildcard-matching)(BFS)[困难]

    链接 https leetcode cn com problems wildcard matching 耗时 解题 xff1a 4 5 h 题解 xff1a 36 min 题意 给定一个字符串 xff08 s xff09 和一个字符模式 x
  • 176. 装满的油箱(bfs)

    题目链接 xff1a https www acwing com problem content description 178 有N个城市 xff08 编号0 1 N 1 xff09 和M条道路 xff0c 构成一张无向图 在每个城市里边都
  • c++:DFS与BFS详解

    DFS xff08 深度优先搜索 xff09 xff1a 从某个状态开始 xff0c 不断转移状态到无法转移为止 xff0c 然后退回到前一步 xff0c 继续转移到其他状态 xff0c 不断重复 xff0c 直至找到最终的解 总是从最开始
  • 拓扑排序(广度优先搜索实现)

    有向无环图可以用来表示各种事物的顺序 比如工作顺序 一些事情必须在另一些事情完成之后才能开始进行 那么 为了获得正确的工作顺序 一件事情开始之前 必须保证它的前置条件全部满足 就需要用到拓扑排序 拓扑排序其实就是在有向无环图中 只要存在边
  • hdu1253 胜利大逃亡(三维bfs索搜)

    http acm hdu edu cn showproblem php pid 1253 第一次做做三维的 思路跟二维的没有区别 这道题目第一次出现Memory Limit Exceeded 这种问题 找了很长时间才发现应该是先判断在存入
  • 【4月第二周学习记录】数据结构与算法王卓-第六章图-图的遍历(邻接矩阵与邻接表,DFS与BFS)

    1 图的遍历基本思路与方法 图的遍历的定义与visited数组 常用的遍历方法 深度优先搜索遍历 Depth First Search DFS 广度优先搜索遍历 Breadth First Search BFS 2 深度优先搜索遍历 Dep
  • 图的遍历方法——DFS和BFS

    DFS类似于树的先序遍历 因此可以用递归实现 BFS类似于树的层次遍历 因此可以用队列实现 说明 下面代码中图的存储方式是邻接表 关于邻接表和邻接矩阵可看邻接表和邻接矩阵 1 深度优先遍历 Depth First Search 思想 从图中
  • Instrusive 【HDU - 5040】【2014 北京 BFS】

    题目链接 一道有着很多需要细节的地方需要注意的题 挺不错的 这题的数据也是给的很好 然后讲一下题意吧 题意 有一个N N的网格 有起点M和终点T 我们从起点需要走到终点 每一步需要花费的时间是单位一 但是呢 我们不能被摄影机拍摄到 摄影机是
  • 八数码问题【康托展开+BFS】

    Vijos 题库 八数码问题 背景 Yours和zero在研究A 启发式算法 拿到一道经典的A 问题 但是他们不会做 请你帮他们 描述 在3 3的棋盘上 摆有八个棋子 每个棋子上标有1至8的某一数字 棋盘中留有一个空格 空格用0来表示 空格
  • LeetCode第127题解析

    给定两个单词 beginWord 和 endWord 和一个字典 找到从 beginWord 到 endWord 的最短转换序列的长度 转换需遵循如下规则 每次转换只能改变一个字母 转换过程中的中间单词必须是字典中的单词 说明 如果不存在这
  • 图论 笔记

    关于存图 如果是有权值的边 可以用pair define pii pair
  • Catowice City【Codeforces 1248 F】【BFS】

    Codeforces Round 594 Div 2 F 一开始是听闻有人说这是一道Tarjan好题 然后就点进来做了 但是想来想去 却想了个另类的法子 我们可以看到 如果N个人都要选择的话 那么每个人都只能是审判者 或者是参赛者 所以 我
  • 【算法学习笔记】17:DFS与BFS

    1 DFS 深度优先搜索常用于解决需要给出所有方案的问题 因为它的搜索顺序就是能够得到一个完整的搜索路径 方案 后回退再去搜索其它的方案 1 1 例题 排列数字 由于要求所有排列的方案 可以每次从 1 n 1 n 1 n里拿一个数字 然后记
  • 天梯题集——愿天下有情人都是失散多年的兄妹(隐藏条件)

    愿天下有情人都是失散多年的兄妹 解题思路 利用结构体读入每个 ID 下数据 隐藏条件 标记父母的性别 卡死个人 假设判断 a b 是否可通婚 同性输出 Never Mind 不同性 bfs标记 a 的五代内的祖先 check检查 b 五代内
  • LeetCode_BinaryTree_1129. Shortest Path with Alternating Colors 颜色交替的最短路径【BFS求最短路径】【java】【中等】

    一 题目描述 英文描述 You are given an integer n the number of nodes in a directed graph where the nodes are labeled from 0 to n 1
  • 【算法学习笔记】19:拓扑排序

    1 简述 计算拓扑序列的一个方式是 用BFS来尝试访问所有的节点 但是有一个约束就是只有入度为 0 0 0的节点才能被加入到扩展队列里 每次从队列里取出一个节点 也就同时在图中将这个节点拆除 所以它的所有后继的节点都减少 1 1 1 如果已
  • 深度、广度优先搜索

    文章目录 二 图的遍历 2 1 深度优先搜索 DFS DFS森林 应用 2 2 广度优先搜索 BFS 基本操作 应用 二 图的遍历 2 1 深度优先搜索 DFS DFS森林 Vertextype GetVex ALGraph G int v
  • LeetCode——1302. 层数最深叶子节点的和

    题目描述 给你一棵二叉树的根节点 root 请你返回层数最深的叶子节点的和 示例 1 输入 root 1 2 3 4 5 null 6 7 null null null null 8 输出 15 示例 2 输入 root 6 7 8 2 7

随机推荐

  • 如何写出高效的sql的一点想法及oracle常用hint用法

    author skate time 2009 05 15 如何写出高效的sql的一点想法 迷糊的问题 1 什么样的sql 才算是高效的sql呢 2 sql为什么不走索引 如何让sql走索引 即改变sql的执行计划3 索引有哪几种 4 什时候
  • 多显示器设置检测不到_那些与显示设置相关的事

    点击上方 蓝字 点击右上角 选 设为星标 标星 防走丢 那些与显示设置相关的事 本文阅读目录 显示分辨率的概念与设置 刷新率的概念与设置 不能满屏显示的原因 显卡控制面板 控制台的概念 多显示器设置 一 显示分辨率的概念与设置 显示分辨率
  • mysql 第10 天

    变量 1 定义 declare DECLARE var name type DEFAULT value 例如 定义一个 DATE 类型的变量 名称是 last month start DECLARE last month start DAT
  • 【话题】感觉和身边其他人有差距怎么办?也许自我调整很重要

    每个人能力有限 水平高低不同 我们身在大环境里 虽然在同一个起跑线上 但是时间久了 你会发现 并越来越感觉到和身边其他人有了差距 慢慢的会有一定的落差感 怎么办呢 通过此篇文章我们来简单聊聊 目录 一 焦虑怎么办 1 接受自己的不完美 2
  • P1182 数列分段 Section II

    题目描述 对于给定的一个长度为N的正整数数列 A 现要将其分成 M M N 段 并要求每段连续 且每段和的最大值最小 关于最大值最小 例如一数列 4 2 4 5 1 要分成 3 段 将其如下分段 4 2 4 5 1 第 1 段和为 6 第
  • java jsonarray 追加_我们如何在Java中将JSONArray添加到JSONObject?

    该JSON是用于交换数据的基于文本的格式 它是轻量级的组件 与语言无关 我们还可以将JSONArray添加到JSONObject 我们需要首先将一些项目添加到ArrayList中 并将此列表传递给JSONArray类的put 方法 最后使用
  • go dll 传char*

    go调用dll中方法参数为 char类型 tiger1103 2017 12 25 10 58发布 1224浏览 问与答 我有一个dll库 里面有一个C实现的方法 int GetPeopleName char strTmp int strL
  • stateflow基础知识之(时序逻辑)

    stateflow状态转移和动作过程中 可以使用两种类型的时序逻辑 基于事件和绝对时间 基于事件的时序逻辑可跟踪重复发生的事件 绝对时间时序逻辑则基于 Stateflow 图的仿真时间定义时间段 要对这些重复事件或仿真时间进行操作 可以使用
  • 总结:对Java内存模型JMM的理解

    JMM规定了线程的工作内存和主内存的交互关系 以及线程之间的可见性和程序的执行顺序 一方面 要为程序员提供足够强的内存可见性保证 另一方面 对编译器和处理器的限制要尽可能地放松 JMM对程序员屏蔽了CPU以及OS内存的使用问题 能够使程序在
  • MySql的常见的语句总结

    目录 MySql的高级查询语句 数据准备 查询中常用的DISTINCT IN BETWEEN OR DESC ASC COUNT MAX LIMIT等关键字 SQL中关于日期的函数 SQL的分组查询和多表查询 sql的子查询以及UNION和
  • 【报错】 openai.error.RateLimitError: Rate limit reached for default-text-davinci-003 in organization

    使用open AI的API调用模型的时候 会出现以下报错 openai error RateLimitError Rate limit reached for default text davinci 003 in organization
  • mysql可扩展用户属性_MySQL扩展--可伸缩性最佳实践:来自eBay的经验

    在eBay 可伸缩性是我们每天奋力抵抗的一大架构压力 我们所做的每一项架构及设计决策 身前身后都能看到它的踪影 当我们面对的是全世界数以亿计的用户 每天的页面浏览量超过10亿 系统中的数据量要用皮字节 1015或250 来计算 可伸缩性是生
  • 解释器和编译器的区别

    解释器与编译器的区别 两者都是将高级语言转换成机器码 解释器在程序运行时将代码转换成机器码 编译器在程序运行之前将代码转换成机器码 编译器相当于做好一桌子菜再开吃 解释器就是吃火锅边煮边吃 吃火锅效率要低一点
  • CStatusBar技巧

    一 状态条控制的主要功能 状态条控制 Status Bar Control 比较容易理解 使用起来也比较简单 状态条是位于父窗口底部的一个水平子窗口 它可以被分成多个显示信息的小区域 其MFC中封装的CstatusBarCtrl控制类提供了
  • 加更一个小项目中的几个神奇的函数,tiff文件在matlab的读取和显示,以及如何在底图上画图和透明度设置

    项目需求 在地图tiff文件上画出轨迹和轨迹周围一定距离的范围 难点 tiff文件格式的读取 图片与经纬度之间的转换 图片具有透明度 在图片上作图 boston R geotiffread boston tif figure mapshow
  • ORB-SLAM2:基于可识别特征的自主导航与地图构建

    ORB SLAM2 基于可识别特征的自主导航与地图构建 ORB SLAM Tracking and Mapping Recognizable Features 转自 http blog csdn net cicibabe article d
  • Linux环境configure编译常用外部参数选项笔记

    Linux环境下的软件安装 并不是一件容易的事情 如果通过源代码编译后在安装 当然事情就更为复杂一些 现在安装各种软件的教程都非常普遍 但万变不离其中 对基础知识的扎实掌握 安装各种软件的问题就迎刃而解了 Configure脚本配置工具就是
  • 如何制作一份更具洞察力的商业BI报告?

    随着市场环境的复杂化 在数据分析中 能否提供更具商业洞察力的数据信息正在成为考核业务员能力的重要参考指标 加强以下两大块能力至关重要 1 业务相关专业能力以及相关知识 2 对工具的驾驭能力 大部分人在数据分析时使用的是Excel 而要把Ex
  • 【编译原理】实验二:NFA到DFA

    目录 实验二 NFA 到 DFA 一 实验目的 二 预备知识 三 实验内容 NFA向DFA的转换的思路 lt
  • 方板围棋吃子换001

    1 描述 130给定一个二维的矩阵 包含 X 和 O 字母 O 找到所有被 X 围绕的区域 并将这些区域里所有的 O 用 X 填充 示例 X X X X X O O X X X O X X O X X 运行你的函数后 矩阵变为 X X X