【每日一题】LCP 41. 黑白翻转棋

news2024/12/29 9:04:33

【每日一题】LCP 41. 黑白翻转棋

  • LCP 41. 黑白翻转棋
    • 题目描述
    • 解题思路

LCP 41. 黑白翻转棋

题目描述

在 n*m 大小的棋盘中,有黑白两种棋子,黑棋记作字母 “X”, 白棋记作字母 “O”,空余位置记作 “.”。当落下的棋子与其他相同颜色的棋子在行、列或对角线完全包围(中间不存在空白位置)另一种颜色的棋子,则可以翻转这些棋子的颜色。

在这里插入图片描述

在这里插入图片描述

力扣挑战赛」黑白翻转棋项目中,将提供给选手一个未形成可翻转棋子的棋盘残局,其状态记作 chessboard。若下一步可放置一枚黑棋,请问选手最多能翻转多少枚白棋。

注意:

若翻转白棋成黑棋后,棋盘上仍存在可以翻转的白棋,将可以 继续 翻转白棋
输入数据保证初始棋盘状态无可以翻转的棋子且存在空余位置

示例 1:

输入:chessboard = ["....X.","....X.","XOOO..","......","......"]

输出:3

解释: 可以选择下在 [2,4] 处,能够翻转白方三枚棋子。

示例 2:

输入:chessboard = [".X.",".O.","XO."]

输出:2

解释: 可以选择下在 [2,2] 处,能够翻转白方两枚棋子。

在这里插入图片描述
示例 3:

输入:chessboard = [".......",".......",".......","X......",".O.....","..O....","....OOX"]

输出:4

解释: 可以选择下在 [6,3] 处,能够翻转白方四枚棋子。

在这里插入图片描述
提示:

1 <= chessboard.length, chessboard[i].length <= 8
chessboard[i] 仅包含 “.”、“O” 和 “X”

解题思路

思路:广度优先搜索。遍历棋盘,使用bfs求解从每一个空位置(x,y)出发所能翻转的最大棋子数,注意,每次枚举的时候不要更改原棋盘。bfs每次将(x,y)加入队列,然后弹出队头元素,从队头位置向四面八方开始搜索,在搜索前首先使用judge判断该位置是否可以行走,如果可以则将该位置翻转为黑色棋子,将其加入队列,并向该方向行走,再将翻转棋子数量加一。judge遇到黑色棋子则返回true表示可以继续走,遇到空白位置则返回false表示不可以继续,反之遇到白色棋子则向该方向一直走,并判断该方向尾部方向是否为黑色棋子,如果是则满足要求,反之不可以。

int dirs[8][2]={
  {1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}
};
//判断是否可以走
bool judge(vector<string> chessboard,int x,int y,int dx,int dy)
{
  x+=dx;
  y+=dy;
  while(x>=0&&x<chessboard.size()&&y>=0&&y<chessboard[0].size())
  {
    //黑色可以走  直到最后是黑色就返回true
    if(chessboard[x][y]=='X')
     return true;
    //空格不能走
    if(chessboard[x][y]=='.')
     return false;
    //白色则向这个方向一直走
    x+=dx;
    y+=dy;
  }
  return false;
}
//注意 每次枚举不要改变原棋盘
//bfs(c,x,y)表示在(x,y)位置放置黑棋所能翻转的棋子数
int bfs(vector<string> chessboard,int px,int py)
{
  int cnt=0;
  queue<pair<int,int>> q;
  q.emplace(px,py);
  chessboard[px][py]='X';
  while(!q.empty())
  {
     auto t=q.front();
     q.pop();
     //从当前向四面八方搜索
     for(int i=0;i<8;i++)
     {
        //首先判断该方向是否被包围
        if(judge(chessboard,t.first,t.second,dirs[i][0],dirs[i][1]))
        {
          //然后向该方向行走
          int x=t.first+dirs[i][0],y=t.second+dirs[i][1];
          while(chessboard[x][y]!='X')
          {
            //该方向被翻转 可以继续判断是否可以行走
            q.emplace(x,y);
            chessboard[x][y]='X';
            x+=dirs[i][0];
            y+=dirs[i][1];
            //翻转数量加一
            cnt++;
          }
         }
        }
    }
    return cnt;
}  
int flipChess(vector<string>& chessboard) 
{
    int res=0;
    for(int i=0;i<chessboard.size();i++)
    {
      for(int j=0;j<chessboard[0].size();j++)
      {
         if(chessboard[i][j]=='.')
           res=max(res,bfs(chessboard,i,j));
      }
    }
    return res;
}

总结:注意,使用方向数组简化判断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JMeter根据负载量计算并发用户数实例

目录 前言&#xff1a; 业务需求 分析需求 测试模型构建 & 用例设计 一、场景构建&#xff1a;登录业务操作流程、考勤打卡操作流程&#xff1b; 二、场景用例设计 三、测试脚本用例设计&#xff1a; 模型构建 登录打卡-操作流程&#xff1a; 场景设计 常用测试场景的类型:…

nx安装llvmlite与numba

文参考 Python安装llvmlite、numba报错解决方案_ClearLon的博客-CSDN博客 llvmlite与numba你可以理解为用于数据处理的加速包 我的python版本为3.6.9&#xff0c;llvmlite版本为0.32.1&#xff0c;numba版本为0.49.1 目录 1 安装 llvmlite 2 安装numba 1 安装 llvmlite…

软件测试技能,JMeter压力测试教程,登录参数化CSV 数据文件设置(五)

目录 前言 一、场景案例 二、登录接口 三、测试数据准备 四、CSV数据文件设置 五、查看结果 前言 我们在压测登录接口的时候&#xff0c;如果只用一个账号去设置并发压测&#xff0c;这样的结果很显然是不合理的&#xff0c;一个用户并发无法模拟真实的情况 如果要压测…

Python的特点和优势

Python的优特点 简单易学&#xff1a; Python语言相对于其他编程语言来说&#xff0c;属于比较容易学习的一门编程语言&#xff0c;它注重的是如何解决问题而不是编程语言的语法和结构。正是因为Python语言简单易学&#xff0c;所以&#xff0c;已经有越来越多的初学者选择Pyth…

你可以不用RxJava,但必须得领悟它的思想!

作者&#xff1a;cofbro 前言 Rx 是一种响应式编程的思想&#xff0c;如今有很多语言都支持这种思想&#xff1a;RxJava&#xff0c;RxJs&#xff0c;RxSwift...。它是基于特殊的观察者模式来实现的&#xff0c;能够轻松的实现异步事件响应流&#xff0c;避免回调地狱的产生。…

Avalon总线协议

Avalon总线主要用于片内处理器与外设&#xff0c;常用于高速数据传输流、读写寄存器和存储器、控制片外器等。 Avalon 总共有七种接口&#xff1a; Avalon Clock Interface, Avalon时钟接口 -- 驱动或接收时钟信号的接口Avalon Reset Interface, Avalon复位接口 -- 驱动或接收…

想要好用的ai绘画工具推荐?分享怎么文字生图片在线

小张: 嘿&#xff0c;小明&#xff0c;你有没有听说过在线将文字转换成图片的工具&#xff1f;我最近在寻找一种方法&#xff0c;可以将我的文字描述转化为视觉图像。 小明: 嗯&#xff0c;听起来很有趣&#xff01;你是指通过某种技术把文字转换成图片&#xff0c;然后展示出…

亚马逊加购对卖家有什么作用?

对亚马逊卖家来说&#xff0c;亚马逊的加购功能也具有一些重要的作用&#xff1a; 1、增加销售机会&#xff1a;当买家将卖家的商品添加到购物车中时&#xff0c;这表示他们对该商品有兴趣&#xff0c;并考虑购买。这为卖家提供了一个机会&#xff0c;因为购物车中的商品更有可…

【For¥】产品落地到$进账重要流程中你需要知道的东西

文章目录 产品思维空、雨、伞-决策思维5W1H-重点思维矩阵分析法费米推理 工具 开发解决方案&#xff08;实现&#xff09;调优&#xff08;性能&#xff09;安全 营销运营常见运营岗位分类运营必备能力 销售策略手段方式话术 来源 产品 思维 空、雨、伞-决策思维 产品经理作…

使用yolov5训练自己的数据集并测试效果

1.源码下载链接 1.yolov5原模型以及权重文件 链接&#xff1a;https://pan.baidu.com/s/1XlvHIxlzJEqp2wlRx5Fb1w 提取码&#xff1a;xtkj 2.训练自己数据集的完整代码 链接&#xff1a;https://pan.baidu.com/s/1xdnah8ZLoT7E1YDm-RiGzQ 提取码&#xff1a;9261 2.训练…

CASAIM签约AMOOL TRADING COMPANY LTD,正式进军中东市场

随着3D打印、三维数字化及全自动化智能检测技术的不断进步和应用领域的扩大&#xff0c;全球市场在高速增长。CASAIM作为国内领先的3D打印、三维数字化及全自动化智能检测技术研发及制造商&#xff0c;一直致力于为全球智能制造企业提供高精度、高效率的智能制造及检测解决方案…

【深度学习】segment-anything使用过程

文章目录 官网Checkpoints安装快速体验导出onnxWeb应用jupyter 脚本运行SAM的脚本automatic_mask_generator_example 官网 https://github.com/facebookresearch/segment-anything Checkpoints 三种模型&#xff1a; parser.add_argument( “–model-type”, typestr, requi…

前端JavaScript中的动态事件添加

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言事件的基本概念动态…

使用AI聊天模型写作和编码心得

原文合集地址如下&#xff0c;有需要的朋友可以关注 本文地址 合集地址 给大家推荐一个国内暂时免费使用AI聊天模型的网站&#xff1a; ChatAnywhere 有需要的朋友可以点击试用一下。 写文档 要点 详细描述要干的事情 说清楚你的需求&#xff0c;例如&#xff1a; 可…

vue3的代码片段如何设置

vscode -文件-用户代码片段 {"vue3 template": {"prefix": "vue3","body": ["<template>"," <div>","$1"," </div>","</template>\n","<s…

家政服务小程序开发

随着人们生活水平的提高和生活节奏的加快&#xff0c;越来越多的家庭需要家政服务来解决家庭问题。为了更好地满足用户需求&#xff0c;家政行业开始发展家政小程序。下面我们来介绍一下家政小程序的主要功能。 1. 家政下单 家政小程序的主要功能之一是家政下单。用户可以在小…

OGG|使用 OGG19c 迁移 Oracle11g 到 19C(第二版)

作者 | JiekeXu 来源 |公众号 JiekeXu DBA之路&#xff08;ID: JiekeXu_IT&#xff09; 如需转载请联系授权 | (个人微信 ID&#xff1a;JiekeXu_DBA) 大家好&#xff0c;我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看使用 OGG19c 迁移 Oracle11g 到 19C(第二版)&am…

Java关于反射的理解

关于反射的理解 Reflection&#xff08;反射)是被视为动态语言的关键&#xff0c;反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息&#xff0c;并能直接操作任意对象的内部属性及方法。 框架 反射 注解 设计模式。 3.体会反射机制的“动态性” //体会…

大模型的涌现能力 (Emergent Abilities of LLM)

作者 | 曾伟豪 北京邮电大学 整理 | NewBeeNLP https://zhuanlan.zhihu.com/p/609339534 大家好&#xff0c;这里是NewBeeNLP。今天一起来研究下LLM中的emergent abilities现象。 论文名称&#xff1a;Emergent Abilities of Large Language Models论文链接&#xff1a;https:/…

java进阶1(数组)

数组 数组是数据的集合&#xff0c;一个容器&#xff0c;用来存储任何类型的数据&#xff0c;包括原始数据类型和引用数据类型&#xff0c;但是一旦指定了数组的类型之后&#xff0c;就只能用来存储指定类型的数据。 数组声明的三种方式&#xff1a; 数据类型[] 数组名 new …