作者 : Xia Xinyu
日期 : 2022-1-3

原题链接

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

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

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

牛皮可用一个 N×M 的字符矩阵来表示,如下所示:


…XXXX…XXX…
…XXXX…XX…
.XXXX…XXX…
…XXXXX…
…XXX…
其中,X 表示斑点部分。

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

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

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

在上面的例子中,他只需要给三个 . 区域内涂色即可(新涂色区域用 ∗ 表示):


…XXXX…XXX…
…XXXX*…XX…
.XXXX…**…XXX…
…XXXXX…
…XXX…
请帮助约翰确定,为了使两个斑点合为一个,他需要涂色区域的最少数量。

输入格式
第一行包含两个整数 N 和 M。

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

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

数据范围
1≤N,M≤50
输入样例:

6 16

…XXXX…XXX…
…XXXX…XX…
.XXXX…XXX…
…XXXXX…
…XXX…

输出样例:

3

思路:推导出最优解一定可以用曼哈顿距离公式求出(反证法)

import java.util.*;class Main{static int[] dx = {1,0,-1,0}; //下右上左static int[] dy = {0,1,0,-1};static char[][] g = new char[60][60];static int n,m;public static void dfs(int x,int y,List<Pair> l){g[x][y] = '.';for(int i = 0; i < 4; i ++){int aa = x + dx[i],bb = y + dy[i];if(aa >= 0 && aa < n && bb >= 0 && bb < m && g[aa][bb] == 'X'){l.add(new Pair(aa,bb));dfs(aa,bb,l);}}}public static void main(String[] args){Scanner in = new Scanner(System.in);n = in.nextInt();m = in.nextInt();for(int i = 0; i < n; i ++){g[i] = in.next().toCharArray();}List<Pair> a = new ArrayList<>();List<Pair> b = new ArrayList<>();boolean flag = false;//搜第一个连通块for(int i = 0; i < n; i ++){for(int j = 0; j < m; j ++){if(g[i][j] == 'X'){a.add(new Pair(i,j));dfs(i,j,a);flag = true;break;}}if(flag)break;}//搜第二个连通块for(int i = 0; i < n; i ++){for(int j = 0; j < m; j ++){if(g[i][j] == 'X'){b.add(new Pair(i,j));dfs(i,j,b);}}}// System.out.println(a.size());// System.out.println(b.size());int res = (int)2e9;for(Pair x : a){for(Pair y : b){res = Math.min(res,Math.abs(x.x - y.x) + Math.abs(x.y - y.y));}}System.out.println(res - 1);}
}
class Pair {int x;int y;public Pair(int x,int y){this.x = x;this.y = y;}
}

2060. 奶牛选美相关推荐

  1. 寒假每日一题2022【week1 完结】

    目录 2058. 笨拙的手指[枚举] 2041. 干草堆[差分] 2060. 奶牛选美[dfs + 思维] 2019. 拖拉机[双端队列] 2014. 岛[思维+离散化] 2005. 马蹄铁[dfs] ...

  2. AcWing2022寒假每日一题(1 月 2 日 ~ 1 月 15 日)

    目录 1/2 AcWing 2058. 笨拙的手指 1/3 (前缀和)AcWing 2041. 干草堆 1/4 (dfs暴力枚举)AcWing 2060. 奶牛选美 1/5 (bfs)AcWing 2 ...

  3. AcWing2022寒假每日一题(1 月 2 日 ~ 1 月 6 日)

    目录 1/2 AcWing 2058. 笨拙的手指 1/3 AcWing 2041. 干草堆 1/4 AcWing 2060. 奶牛选美 1/5 AcWing 2019. 拖拉机 1/6 AcWing ...

  4. AcWing寒假每日一题2022-第1周

    week 1: 2058.笨拙的手指 2041.干草堆 2060.奶牛选美 2019.拖拉机 2014.岛 2058.笨拙的手指 一.问题描述 奶牛贝茜正在学习如何在不同进制之间转换数字.但是她总是犯 ...

  5. ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!

    两题水题: 1.如果一个数能被分解为两个素数的乘积,则称为Semi-Prime,给你一个数,让你判断是不是Semi-Prime数. 2.定义F(0) = 7, F(1) = 11, F(n) = F( ...

  6. HIT 2060 Fibonacci Problem Again

    点击此处即可传送HIT 2060 As we know , the Fibonacci numbers are defined as follows: F(n) == {1 n==0||n==1{F( ...

  7. 2060. 同源字符串检测

    2060. 同源字符串检测 原字符串由小写字母组成,可以按下述步骤编码: 任意将其 分割 为由若干 非空 子字符串组成的一个 序列 . 任意选择序列中的一些元素(也可能不选择),然后将这些元素替换为元 ...

  8. 信息学奥赛一本通 2060:【例1.1】计算机输出

    [题目链接] ybt 2060:[例1.1]计算机输出 [题目考点] 1. 输出字符串 cout << 字符型常量; printf(字符型常量); [题解代码] 解法1: #include ...

  9. 信息学奥赛一本通(2060:【例1.1】计算机输出)

    2060:[例1.1]计算机输出 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 597     通过数: 424 [题目描述] 在屏幕上输出"Hello ...

  10. 1971旗舰cpu intel_Intel 酷睿i7 9700F搭配影驰GeForce RTX 2060大将

    Intel 酷睿i7 9700F搭配影驰GeForce RTX 2060 大将台式电脑搭配方案 作为次旗舰的代表,8700K的升级产品,9700F提升了睿频,采用了八核心八线程设计,主频3GHz,最大 ...

最新文章

  1. 加权最小二乘法的原理讲解
  2. python requests库详解_python的requests库详解
  3. 职场中神奇的程序员,却常常被人说“太直”,这是什么样的思维?
  4. TBXML常用API
  5. C语言函数声明与定义(待删除)
  6. mysql 查询关键词顺序
  7. 世界杯座位选择顺序总数
  8. MT6737模块编译方法
  9. Win7系统如何在线进行重装?在线一键重装Win7方法
  10. 计算机毕业设计JavaVue.js音乐播放器设计与实现(源码+系统+mysql数据库+lw文档)
  11. 一文搞懂“如何通过群晖+DNSPod DDNS搭建私有云服务?”
  12. 技术变现第一步:网站快速接入国际支付 Stripe
  13. iphone 投屏到android,苹果安卓手机投屏之(二)——音频文件在电视上播放
  14. 距离2021年还剩75天,我在想什么?
  15. Hollo world
  16. vue 使用vue-i18n 实现多语系(国际化)
  17. 计算机图形学入门(一)-线性代数部分知识1
  18. pkpm快速入门教程_PKPM结构软件从入门到精通高清版
  19. mysql查询当月数据_MySQL查询当天当月数据 | 小灰灰博客
  20. 10bit显示器测试软件,LAPAELO  32寸 4k 10bit面板 显示器 简单测试

热门文章

  1. 算法 判断多个点是否在同一圆周线上_广州灵活计费自动出盘机技术方案大盘点...
  2. protocol buffer的使用
  3. nslookup get public/external IP
  4. IBM PowerAI编程大赛Q2场来袭!探秘金融语料大数据识别
  5. mysql-proxy实现读写分离
  6. Java 异常类层次结构
  7. win8 64位 iis8 安装.net1.1
  8. 多核cpu服务器安装SQLserver 2005的问题
  9. VMware:虚拟化技术为运营商消除隐患
  10. mybatis逆向工程详解