蓝桥杯 历届试题 剪格子(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 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个 ...
随机推荐
- OpenERP Web开发
转自:http://blog.csdn.net/mackz/article/details/22581517 在7和8下测试均可. 1.相关库/框架 主要:jQuery(使用1.8.3,如果使用新版本 ...
- ORA-16014 与 ORA-00312
场景: SQL> alter system archive log current; alter system archive log current * 第 1 行出现错误: ORA-1601 ...
- win7编程接口的一些变化
原文链接:http://www.nirsoft.net/articles/windows_7_kernel_architecture_changes.html Windows 7 introduces ...
- python如何获取公众号下面粉丝的openid
如何获取公众号下面粉丝的openid呢,首先要获取一个access_token,这个token可不是令牌(Token),如何获取这个access_token呢?有两种方法,方法如下: # -*- co ...
- 【android开发】使用PopupWindow实现页面点击顶部弹出下拉菜单
没有太多花样,也没有很复杂的技术,就是简单的PopupWindow的使用,可以实现点击弹出一个自定义的view,view里可以随便设计,常用的可以放一个listview. demo中我只是一个点击展示 ...
- Node.js + Express + Ubuntu
1 . 怎么在ubuntu中,background的方式 启动express. 网站www /home/host/express/web/bin# nohup node www 2. Node.js的 ...
- informix-時間格式的各種用法
以下是我在網路上所收集到的關於informix 時間的sql函數用法,有在使用informix資料庫的人,可以參考看看囉! today,返回現在系統日期 current 返回現在日期含時間,相當於sq ...
- RPC服务框架dubbo(四):Dubbo中Provider搭建
1.新建Maven Project, 里面只有接口(dubbo-service) 1.1 为什么这么做? RPC框架,不希望Consumer知道具体实现.如果实现类和接口在同一个项目中,Consume ...
- pcie dma的玩法
There is some issue with the implement script. So I took the manual steps. 1. Created the pcie core ...
- mysqlbinlog 导出某时间段的是二进制日志
mysqlbinlog --no-defaults --start-datetime="2016-07-26 00:00:00" --stop-datetime="201 ...