Acwing.2060 奶牛选美(DFS)

题目

听说最近两斑点的奶牛最受欢迎,约翰立即购进了一批两斑点牛。

不幸的是,时尚潮流往往变化很快,当前最受欢迎的牛变成了一斑点牛。

约翰希望通过给每头奶牛涂色,使得它们身上的两个斑点能够合为一个斑点,让它们能够更加时尚。

牛皮可用一个 N×M
的字符矩阵来表示,如下所示:
在这里插入图片描述
其中,X 表示斑点部分。

如果两个 X在垂直或水平方向上相邻(对角相邻不算在内),则它们属于同一个斑点,由此看出上图中恰好有两个斑点。

约翰牛群里所有的牛都有两个斑点。

约翰希望通过使用油漆给奶牛尽可能少的区域内涂色,将两个斑点合为一个。

在上面的例子中,他只需要给三个 .区域内涂色即可(新涂色区域用 ∗表示):
在这里插入图片描述
请帮助约翰确定,为了使两个斑点合为一个,他需要涂色区域的最少数量。

输入格式

第一行包含两个整数 N和 M。

接下来 N行,每行包含一个长度为 M的由 X和 .构成的字符串,用来表示描述牛皮图案的字符矩阵。

输出格式

输出需要涂色区域的最少数量。

数据范围

1≤N,M≤50

  • 输入样例:
6 16
................
..XXXX....XXX...
...XXXX....XX...
.XXXX......XXX..
........XXXXX...
.........XXX....
  • 输出样例:
3

题解

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author akuya
 * @create 2024-03-18-21:28
 */
public class Main {

    static int N=55;
    static char a[][]=new char[N][N];
    static int n,m;
    static int xy[][]={{1,0,-1,0},{0,1,0,-1}};
    static List<sit> list=new ArrayList<>();
    static List<sit> list2=new ArrayList<>();
    static int ans=Integer.MAX_VALUE;

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        n=scanner.nextInt();
        m=scanner.nextInt();
        for(int i=1;i<=n;i++){
            String t=scanner.next();
            for(int j=0;j<t.length();j++){
                a[i][j+1]=t.charAt(j);
            }
        }

        int flag=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                if(a[i][j]=='X'){
                    if(flag==0) {
                        dfs(i, j, list);
                        flag++;
                    }
                    else
                        dfs(i,j,list2);
                }
            }
        }

        for(sit s1:list){
            for(sit s2:list2){
                ans=Math.min(ans,Math.abs(s1.x-s2.x)+Math.abs(s1.y-s2.y));
            }
        }

        System.out.println(ans-1);
    }

    public static void dfs(int i,int j,List<sit> list){
        list.add(new sit(i,j));
        a[i][j]='.';
        for(int k=0;k<4;k++){
            int x=j+xy[0][k];
            int y=i+xy[1][k];
            if(x<=m&&x>=1&&y<=n&&y>=1&&a[y][x]=='X'){
                dfs(y,x,list);
            }
        }


    }
}

class sit{
    int x;
    int y;

    public sit(int x, int y) {
        this.x = x;
        this.y = y;
    }
}


思路

这道题经典的搜索问题,可以使用DFS与BFS和并查集,现将两个标点的位置标记,最后再通过一个数学定理,只有xy方向的话两点最近距离就是垂直距离,计算出结果,最后统计最小数值即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

构建卓越数据应用体系,释放企业数据资产的最大价值

随着数字化浪潮的汹涌而至&#xff0c;数据已经成为驱动社会发展的重要资源。在这个信息爆炸的时代&#xff0c;如何有效地收集、管理、分析和应用数据&#xff0c;成为摆在我们面前的一大挑战。数据应用体系的建设&#xff0c;不仅关乎企业竞争力的提升&#xff0c;更是推动整…

前端模块化开发

模块化发展历程 一个模块单独抽离成一个文件&#xff0c;&#xff08;缺点&#xff1a; 命名冲突&#xff0c;全靠约定&#xff09;命名空间的方式&#xff0c;导出一个对象&#xff08;确定&#xff1a;命名冲突还是存在&#xff0c;可在外部修改&#xff0c;没解决依赖关系的…

fastadmin实验教学管理最近新增功能的技术盘点

在与用户交流中&#xff0c;发现了有些功能不够便捷&#xff0c;特抽出时间优化了一下 一键锁定 优化背景&#xff1a;先通过实验日期或实验名称先搜索&#xff0c;然后选中对应的复选框&#xff0c;再点击“锁定”&#xff0c;这样容易漏选或错选 1.工具栏新增自定义按钮“一…

目标检测——PP-YOLOv2算法解读

PP-YOLO系列&#xff0c;均是基于百度自研PaddlePaddle深度学习框架发布的算法&#xff0c;2020年基于YOLOv3改进发布PP-YOLO&#xff0c;2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet&#xff0c;2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列&#xff0c;所以放一起解…

面向未来的前沿人工智能监管

策制定者应该为未来十年人工智能系统更加强大的世界做好准备。这些发展可能会在人工智能科学没有根本性突破的情况下发生&#xff0c;只需扩展当今的技术以在更多数据和计算上训练更大的模型即可。 用于训练前沿人工智能模型的计算量在未来十年可能会显着增加。到 2020 年代末…

Linux初识环境变量

&#x1f30e;环境变量【上】 文章目录&#xff1a; 环境变量 什么是环境变量 关于命令行参数 环境变量       简单了解       为什么需要环境变量       系统中其他环境变量 总结 前言&#xff1a; 环境变量是一种非常重要的概念&#xff0c;它们对于系统的…

springboot酒店管理系统 论文【源码】

springboot酒店管理系统开发说明 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1…

路由器级联

目录 一、实现功能二、实现步骤2.1 接线步骤 三、效果3.1 常规连接3.2 路由器级联 一、实现功能 主路由器&#xff1a;可有WiFi功能&#xff0c;LAN口下接各设备&#xff0c;并接一个辅路由器辅路由器&#xff1a;开启WiFi功能&#xff0c;有线或无线下接各设备功能&#xff1…

长安链正式发布三周年,技术更迭支撑产业变革

导语&#xff1a; 2024年1月27日长安链正式发布三周年&#xff0c;开源社区借开年之际与大家一同回顾长安链三年来的技术发展历程&#xff0c;每一个里程碑的建设都得益于与长安链同行的合作伙伴与开发者&#xff0c;希望在2024年可以共同携手继往开来&#xff0c;为数字经济发…

深入浅出前端本地储存(1)

引言 2021 年&#xff0c;如果你的前端应用&#xff0c;需要在浏览器上保存数据&#xff0c;有三个主流方案&#xff1a; CookieWeb Storage (LocalStorage)IndexedDB 这些方案就是如今应用最广、浏览器兼容性最高的三种前端储存方案 今天这篇文章就聊一聊这三种方案的历史…

安装vcenter管理esxi

安装vcenter管理esxi虚拟化操作系统 文章目录 安装vcenter管理esxi虚拟化操作系统1.安装vcenter2.vcenter的应用 1.安装vcenter esxi虚拟机具体安装步骤请参考上一篇文章&#xff0c;vcenter软件包需自己到网上下 2.vcenter的应用

蚓链帮助企业对资源进行数字化整合,加速变现实现利他多赢!

​蚓链作为一种数字化资源整合的工具或平台&#xff0c;可以帮助企业实现数字化资源整合。在当前的数字化时代&#xff0c;各种信息和资源呈现出乘方式的增长。企业要想在竞争中脱颖而出&#xff0c;就需要对这些资源进行有效的整合和利用。蚓链通过提供一套完善的数字化解决方…

Flutter Plugin中依赖aar本地包

一、首先在项目的根目录的build.gradle中&#xff0c;添加如下代码 allprojects {repositories {//...flatDir {//pay_2c2p就是你的flutter plugin插件名称dirs project(:pay_2c2p).file(libs)}} }二、然后到Plugin的android目录中 &#xff0c;在src目录的同级创建libs目录将…

Java安全基础 必备概念理解

Java安全基础 关键概念汇总 文章目录 Java安全基础 关键概念汇总前置知识1.构造器this以及包的使用2.继承3.重写/ 重载 / super4.多态5.区分和equals方法6.toString的使用7.Object的概念8.static,final,代码块static代码块final 9.动态代理10.类的动态加载1)类加载器含义&#…

LeetCode 热题 100 | 回溯(三)

目录 1 131. 分割回文串 2 51. N 皇后 菜鸟做题&#xff0c;语言是 C&#xff0c;感冒好了 ver. 1 131. 分割回文串 题眼&#xff1a;给你一个字符串 s&#xff0c;请你将 s 分割 成一些子串。 根据题眼可知&#xff0c;我们需要做的是将字符串 s 连续分割 为几段&#…

医保智慧购药:探索医保买药小程序技术开发与应用

如今&#xff0c;医保智慧购药成为了一种趋势&#xff0c;尤其是医保买药小程序的技术开发和应用&#xff0c;为患者提供了更加便捷、高效的医药购买体验。 医保买药小程序是一种基于手机移动终端的应用程序&#xff0c;它通过智能化的算法和医保系统的对接&#xff0c;为患者…

gPTP简介

1、gPTP&#xff08;generalized precision time protocol&#xff09;广义时钟同步协议 gPTP&#xff08;generalized precision time protocol&#xff09;广义时钟同步协议&#xff0c;即IEEE 802.1AS协议。它是IEEE 1588协议的延伸&#xff0c;可以为TSN提供全局精准…

Legacy|电脑Windows系统如何迁移到新安装的硬盘?系统迁移详细教程!

前言 前面讲了很多很多关于安装系统、重装系统的教程。但唯独没有讲到电脑换了新的硬盘之后&#xff0c;怎么把旧系统迁移到新的硬盘上。 今天小白就来跟各位小伙伴详细唠唠&#xff1a; 开始之前需要把系统迁移的条件准备好&#xff0c;意思就是在WinPE系统下&#xff0c;可…

【Linux】Linux权限详解(权限管理-目录权限-粘滞位)

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;Linux_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.Linux权限的概念 2.Linux权限管理 2.1 文件访问者的分类 2.2 文件类型和访问权限 ​编辑 1.文件类型 2.基本权限 2. 3 文件权…

android adb 实时画面 和操作

1. 下载 scrcpy 建议 windows10 用户 点击链接下载 不然可能会提示缺少部分 dll https://github.com/Genymobile/scrcpy/releases/download/v2.3.1/scrcpy-win32-v2.3.1.ziphttps://github.com/Genymobile/scrcpy/releases/download/v2.3.1/scrcpy-win32-v2.3.1.zip windo…