当前位置: 首页 > news >正文

米哈游春招后端-2023.03.19-第一题-米哈游的RBG矩阵-简单

米哈游的RBG矩阵

Problem Description

米小游拿到了一个矩阵,矩阵上有一格有一个颜色,为红色( R )。绿色( G )和蓝色( B )这三种颜色的一种。
然而米小游是蓝绿色盲,她无法分游蓝色和绿色,所以在米小游眼里看来,这个矩阵只有两种颜色,因为蓝色和绿色在她眼里是一种颜色。
米小游会把相同颜色的部分看成是一个连通块。请注意,这里的连通划是上下左右四连通的。
由于色盲的原因,米小游自己看到的连通块数量可能比真实的连通块数量少。 你可以帮米小游计算连通块少了多少吗?

input

第一行输入两个正整数 n 和 m,代表矩阵的行数和列数。接下来的 n 行,每行输入一个长度为m 的,仅包含 R 、G 、B
三种颜色的字符串,代表米小游拿到的矩阵。 1≤n,m≤1000

ouput

一个整数,代表米小游视角里比真实情况少的连通块数量。

Sample Input

2 6
RRGGBB
RGBGRR

Sample Output

3

题目类型、难度、来源

  • 类型:DFS、BFS、并查集
  • 难度:简单
  • 来源:米哈游春招后端-2023.03.19-第一题-米哈游的RBG矩阵

总体思路:

  • 此题就是求一个图的联通分量数量。可以用并查集也可以用DFS、BFS。方法很多,数据集也不打,我这里为了写代码方便,就用了DFS。

AC代码

#include <iostream>
using namespace std;
// flag=1: 米小游视角
int n, m;
bool same_color(char &c1, char &c2, bool flag){
    if (c1 == c2){
        return true;
    }else if (flag){
        return (c1 + c2 == 'B' + 'G');
    }
    return false;
}
void DFS(char **G, bool **visted,bool &flag, int i, int j){
    visted[i][j] = 1;
    if (i+1 < n){
        if (same_color(G[i+1][j], G[i][j], flag) && !visted[i+1][j]){ 
            DFS(G, visted, flag, i+1, j);
        } 
    }
    if (j+1 < m){
        if (same_color(G[i][j+1], G[i][j], flag) && !visted[i][j+1]){
            DFS(G, visted, flag, i, j+1);
        }
    }
    if (i-1 >= 0){
        if (same_color(G[i-1][j], G[i][j], flag) && !visted[i-1][j]){
            DFS(G, visted, flag, i-1, j);
        } 
    }
    if (j-1 >= 0){
        if (same_color(G[i][j-1], G[i][j], flag) && !visted[i][j-1]){
            DFS(G, visted, flag, i, j-1);
        } 
    }
}
int get_num(char **G, bool flag, int n, int m){
    bool **visted = new bool*[n];
    for (int i = 0; i < n; i++){
        visted[i] = new bool[m];
    }
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            visted[i][j] = false;
        }
    }
    int cnt = 0;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            if (visted[i][j])   continue;
            DFS(G, visted, flag, i, j);
            cnt++;
        }
    }
    return cnt;
}
int main(){
    cin >> n >> m;
    char **G = new char*[n];
    for (int i = 0; i < n; i++){
        G[i] = new char[m];
        for (int j = 0; j < m; j++){
            cin >> G[i][j];
        }
    }
    int cnt1 = get_num(G, 0, n, m);
    int cnt2 = get_num(G, 1, n, m);
    cout << cnt1-cnt2;
    return 0;
}
  • 更多大厂真题可以看:2023实习、秋招互联网大厂技术岗算法真题-刷题(持续更新)

相关文章:

  • 教你精通JavaSE语法之第九章、抽象类和接口
  • 龙芯2K1000开发板拷贝镜像到固态
  • 前端计算文件 hash
  • ChatGPT写作文章-快速使用ChatGPT不用注册方式
  • 2万字60道MySQL经典面试题总结(附答案)
  • Maven生命周期、mvn命令、Maven插件
  • 【ChatGPT】这是一篇ChatGPT写的关于Python的文章
  • Ubuntu之NVIDIA GeForce显卡驱动安装
  • 【华为OD机试 2023最新 】 通信误码(C++)
  • 为Activity的启动添加约束条件
  • 2022年河南省高等职业教育技能大赛云计算赛项竞赛方案
  • 时间序列教程 一、数据的三个组成部分
  • 微前端:angular 8版本以上使用qiankun
  • 1.2、shell编程
  • 基于WebSocket的网页聊天室
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • [译] React v16.8: 含有Hooks的版本
  • 《深入 React 技术栈》
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • E-HPC支持多队列管理和自动伸缩
  • javascript 总结(常用工具类的封装)
  • k8s如何管理Pod
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • swift基础之_对象 实例方法 对象方法。
  • 数据结构java版之冒泡排序及优化
  • 我与Jetbrains的这些年
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • postgresql行列转换函数
  • 回归生活:清理微信公众号
  • ​MySQL主从复制一致性检测
  • ​Spring Boot 分片上传文件
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • (1)(1.11) SiK Radio v2(一)
  • (LeetCode C++)盛最多水的容器
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (转)winform之ListView
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .md即markdown文件的基本常用编写语法
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET企业级应用架构设计系列之开场白
  • .NET序列化 serializable,反序列化
  • @EnableAsync和@Async开始异步任务支持
  • @Transactional 竟也能解决分布式事务?
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [16/N]论得趣
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [C/C++]数据结构 栈和队列()