问题描述

如下图所示,3 x 3 的格子中填写了一些整数。

+--*--+--+
|10* 1|52|
+--****--+
|20|30* 1|
*******--+
| 1| 2| 3|
+--+--+--+

我们沿着图中的星号线剪开,得到两个部分,每个部分的数字和都是60。

本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。

如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。

如果无法分割,则输出 0。

输入格式

程序先读入两个整数 m n 用空格分割 (m,n<10)。

表示表格的宽度和高度。

接下来是n行,每行m个正整数,用空格分开。每个整数不大于10000。

输出格式

输出一个整数,表示在所有解中,包含左上角的分割区可能包含的最小的格子数目。

样例输入1

3 3

10 1 52

20 30 1

1 2 3

样例输出1

3

样例输入2

4 3

1 1 1 1

1 30 80 2

1 1 1 100

样例输出2

10

import java.util.Scanner;

public class Main {
public static int n, m;
public static int SUM;
public static int[][] step = {{-1,0},{1,0},{0,-1},{0,1}};
public static int[][] map;
public static int[][] visited;
public static int result = 10000; public void testDFS(int x, int y, int[][] v) { //完成剪切后的另一部分是否是连通的
v[x][y] = 2;
for(int i = 0;i < 4;i++) {
int x1 = x + step[i][0];
int y1 = y + step[i][1];
if(x1 < 0 || x1 >= n || y1 < 0 || y1 >= m)
continue;
if(v[x1][y1] == 0)
testDFS(x1, y1, v);
}
} public void dfs(int startX, int startY, int count, int sum) {
if(sum == SUM / 2) {
int x = 0, y = 0, step = 0;
int[][] v = new int[n][m];
for(int i = 0;i < n;i++) {
for(int j = 0;j < m;j++) {
if(visited[i][j] == 0) {
x = i;
y = j;
}
v[i][j] = visited[i][j];
}
}
testDFS(x, y, v);
for(int i = 0;i < n;i++)
for(int j = 0;j < m;j++)
if(v[i][j] == 2)
step++;
if(step + count == n * m) {
if(visited[0][0] == 1)
result = Math.min(result, count);
else {
result = Math.min(result, step);
}
}
return;
} else if(sum > SUM / 2)
return;
for(int i = 0;i < 4;i++) {
int x1 = startX + step[i][0];
int y1 = startY + step[i][1];
if(x1 < 0 || x1 >= n || y1 < 0 || y1 >= m)
continue;
if(visited[x1][y1] == 1)
continue;
visited[x1][y1] = 1;
count++;
sum += map[x1][y1];
dfs(x1, y1, count, sum);
sum -= map[x1][y1];
count--;
visited[x1][y1] = 0;
}
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
m = in.nextInt();
n = in.nextInt();
map = new int[n][m];
SUM = 0;
for(int i = 0;i < n;i++) {
for(int j = 0;j < m;j++) {
map[i][j] = in.nextInt();
SUM += map[i][j];
}
}
if(SUM % 2 == 0) {
for(int i = 0;i < n;i++) {
for(int j = 0;j < m;j++) {
visited = new int[n][m];
int sum = map[i][j];
int count = 1;
visited[i][j] = 1;
test.dfs(i, j, count, sum);
}
}
if(result != 10000)
System.out.println(result);
else
System.out.println("-1");
} else
System.out.println("-1");
}
}

Java实现 蓝桥杯 历届试题 剪格子的更多相关文章

  1. 蓝桥杯 历届试题 剪格子(dfs搜索)

    历届试题 剪格子 时间限制:1.0s   内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |* || +--****--+ ||* | ** ...

  2. 蓝桥杯  历届试题 剪格子  dfs

    历届试题 剪格子 时间限制:1.0s   内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20 ...

  3. 蓝桥杯-历届试题 剪格子(dfs)

    历届试题 剪格子   时间限制:1.0s   内存限制:256.0MB        问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--**** ...

  4. Java实现蓝桥杯历届试题兰顿蚂蚁

    历届试题 兰顿蚂蚁 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其 ...

  5. Java实现蓝桥杯历届试题分考场

    历届试题 分考场 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 n个人参加某项特殊考试. 为了公平,要求任何两个认识的人不能分在同一个考场. 求是少需要分几个考场才能满足条件. 输 ...

  6. Java实现蓝桥杯历届试题回文数字

    历届试题 回文数字 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做: ...

  7. Java实现蓝桥杯历届试题高僧斗法

    历届试题 高僧斗法 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 古时丧葬活动中经常请高僧做法事.仪式结束后,有时会有"高僧斗法"的趣味节目,以 ...

  8. Java实现蓝桥杯历届试题买不到的数目

    历届试题 买不到的数目 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友 ...

  9. Java实现 蓝桥杯 历届试题 斐波那契

    试题 历届试题 斐波那契 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 - (x=1,2) f(x) = f(x-1) ...

随机推荐

  1. 在dynamics 365 中,看字段的描述需要到系统字段设置里面才能看到,这里提供一种sql直接看字段和实体名描述的方法

    1.在crm对应的主数据库执行下面存储过程: -- ============================================= -- Author: <Author,,Name& ...

  2. Spring全家桶之spring boot(五)

    Thymeleaf简介 Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发,模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#.PHP语言体系下也 ...

  3. vue父子组件之间相互传值

    1. 子组件使用父组件方法,并向父组件传值 子组件代码 <template> <div class="menu"> <div class=" ...

  4. MyBatis缓存机制(一级缓存,二级缓存)

    一,MyBatis一级缓存(本地缓存) My Batis 一级缓存存在于 SqlSession 的生命周期中,是SqlSession级别的缓存.在操作数据库时需要构造SqlSession对象,在对象中 ...

  5. ios上表单默认样式

    摘自:http://blog.sina.com.cn/s/blog_7d796c0d0102uyd2.html 可惜不能直接转到博客园. input[type="button"], ...

  6. css概述五

    十一.显示 1.显示方式 决定元素在网页中的表现形式(块级,行内,行内块,table) 语法: display: 取值: 1.display:block: 让元素以块级的方式显示 2.display: ...

  7. removebg抠图小工具

    由于比较简单,直接上代码(removebg接口官网),更多小工具获取 (1)官网API,需注册获取X-Api-Key:removebg_官网api.py import requests respons ...

  8. POJ1436

    题目链接:https://vjudge.net/problem/POJ-1436 解题思路:基于y轴建立线段树. 如图是根据样例画出的图.下面都以题目样例为例. 但是,如果仅仅以给出的y1, y2为边 ...

  9. A + B Problem(hdu1000)

    注意,认真读题目的Input要求,看看是输入一组测试数据还是输入多组测试数据.输入多组数据,不要忘记while(). #include<iostream> using namespace ...

  10. web项目——org.apache.jasper.JasperException: /WEB-INF/content/mainForm.jsp (line: 3, column: 62) File "/WEB-INF/c.tld" not found

    报错信息: HTTP Status 500 – Internal Server Error Type Exception Report Message /WEB-INF/content/mainFor ...