蓝桥杯 历届试题 剪格子(dfs搜索)
历届试题 剪格子
如下图所示,3 x 3 的格子中填写了一些整数。
+--*--+--+
|* ||
+--****--+
||* |
*******--+
| | | |
+--+--+--+
我们沿着图中的星号线剪开,得到两个部分,每个部分的数字和都是60。
本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。
如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。
如果无法分割,则输出 0。
程序先读入两个整数 m n 用空格分割 (m,n<10)。
表示表格的宽度和高度。
接下来是n行,每行m个正整数,用空格分开。每个整数不大于10000。
10 1 52
20 30 1
1 2 3
1 1 1 1
1 30 80 2
1 1 1 100
#*#*
###*
****
没有分成两部分。
另外,这组测试数据
我的代码输出是4,但是正确答案应该是3。
这些情况都没有考虑,但是提交一样正确,由此可见,出题者根本没有考虑那么多,题目描述也不是很严谨。
可以参考这位大神的代码,第十道题,多种情况都考虑了。
#include <iostream>
#include <string.h>
using namespace std;
int a[][];
int dx[] = {,,,-};
int dy[] = {,,-,};
bool isv[][];
int M,N,SUM;
bool judge(int x,int y,int num)
{
if( x< || y< || x>N || y>M ) //越界
return ;
if( isv[x][y] ) //访问过
return ;
if( num + a[x][y] > SUM/ ) //走这一步超过了和的1半
return ;
return ;
}
int dfs(int x,int y,int num)
{
if(num==SUM/){
return ;
}
for(int i=;i<;i++){
int nx = x + dx[i];
int ny = y + dy[i];
if( judge(nx,ny,num) ) //判断
continue;
//下一步可以走
isv[nx][ny] = true;
int res = dfs(nx,ny,num+a[nx][ny]);
if(res) //产生结果,直接返回
return res+;
isv[nx][ny] = false;
}
return ;
}
int main()
{
while(cin>>M>>N){
SUM = ;
for(int i=;i<=N;i++)
for(int j=;j<=M;j++){
cin>>a[i][j];
SUM += a[i][j];
}
if( SUM% ){ //和是奇数一定不可以
cout<<<<endl;
}
else{ //和是偶数继续判断
memset(isv,,sizeof(isv));
isv[][] = true;
cout<<dfs(,,a[][])<<endl;
}
}
return ;
}
Freecode : www.cnblogs.com/yym2013
蓝桥杯 历届试题 剪格子(dfs搜索)的更多相关文章
- 蓝桥杯 历届试题 剪格子 dfs
历届试题 剪格子 时间限制:1.0s 内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20 ...
- 蓝桥杯-历届试题 剪格子(dfs)
历届试题 剪格子 时间限制:1.0s 内存限制:256.0MB 问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--**** ...
- Java实现 蓝桥杯 历届试题 剪格子
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+ |10* 1|52| +--****--+ |20|30* 1| *******--+ | 1| 2| 3| +--+ ...
- 蓝桥杯 历届试题 幸运数 dfs
历届试题 幸运数 时间限制:1.0s 内存限制:256.0MB 问题描述 幸运数是波兰数学家乌拉姆命名的.它采用与生成素数类似的"筛法"生成 . 首先从1开始写出自然数1,2, ...
- 蓝桥杯练习系统历届试题 剪格子 dfs
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|*******--+| 1| 2| 3|+--+--+--+ ...
- 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索
问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
- 蓝桥杯 历届试题 网络寻路(dfs搜索合法路径计数)
X 国的一个网络使用若干条线路连接若干个节点.节点间的通信是双向的.某重要数据包,为了安全起见,必须恰好被转发两次到达目的地.该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种不同的转发路径 ...
- 蓝桥杯 历届试题 约数倍数选卡片 (经典数论+DFS)
闲暇时,福尔摩斯和华生玩一个游戏: 在N张卡片上写有N个整数.两人轮流拿走一张卡片.要求下一个人拿的数字一定是前一个人拿的数字的约数或倍数.例如,某次福尔摩斯拿走的卡片上写着数字“6”,则接下来华生可 ...
- 蓝桥杯历届试题 危险系数(dfs或者并查集求无向图关于两点的割点个数)
Description 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个 ...
随机推荐
- Java之速记(1) - 小结与疑惑
接触Java也有几个年头了,从对编程没有什么概念的新人(在大学里啃J2SE6.0编程指南),到工作用Play框架写一些简单的模块,再到用Structs2+Hibernate编写主要模块,再到现在独立开 ...
- js 多级联动(省、市、区)
js 多级联动(省.市.区) CreateTime--2018年4月9日17:10:38 Author:Marydon 方式一: 数据从数据库获取,ajax实现局部刷新 方式二: 数据从json文 ...
- 转:【Linux】linux系统中find和whereis查找命令常用示例
转载至:wanqi博客园:http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html whereis 命令,直接查找需要的文件名称 ...
- (五)hibernate关联映射之——多对一映射
单向多对一关联: 1.多对一的关系和关系数据库中的外键参照关系最匹配,即在己方(多方)的表中的一个外键参照另一个表的主键: 2.通过在多方持有一方的引用实现,需要在“多”的一端使用<many-t ...
- PHP自学,第一阶段,基础学习
环境搭建OS X系统上 Win7执行OS X虚拟机 在 OS X上安装MAMP执行环境 IDE使用 Netbeans PHP版本号开发 数据库使用mysql 自学资料使用:PHP从入门到精通.pdf ...
- mysql create dabase 语法详解
由于SQL标准的存在,各个关系型数据库管理系统中创建库的语句都差不多 一.mysql 中创建数据库的语法如下: 1.创建数据库的语法: create {database | schema } [if ...
- php中的静态变量
一.静态变量1.静态变量是只存在于作用域的变量,不过,在函数执行完成以后,这种变量的值不会丢失,也就是说,在下一次调用这个函数时,变量仍会记得原来的值.2.将表达式计算出来的结果付给静态变量是不合法的 ...
- ubuntu更新出错--Could not get lock /var/lib/dpkg/lock
ubuntu在vps上安装好后,通常第一个命令是更新系统软件.然而在运行的过程中,却出现这样的错误: E: Could not get lock /var/lib/dpkg/lock - open ( ...
- C++ string long double转char*
long long q = 10; ]; char* output; sprintf(s, "%ld", q); output = s; double ]; sprintf(s1, ...
- Virtex6 PCIe 超简版基础概念学习(二)
Virtex6 PCIe 超简版基础概念学习(二) 分类:FPGAPCIe (2081) (0) 举报 收藏 文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 ise14.7 ...