问题 1432: [蓝桥杯][历届试题]剪格子
2018-03-29 19:24
351 查看
点击打开链接查看题目
从第一个格子开始进行深搜,则搜到认为是划分在一起的,未搜到认为是另一部分。#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
using namespace std;
int row,col,ans,half;
int Map[15][15];
int vis[15][15];
int dir[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};
void dfs(int x,int y,int sum,int depth) {
//当前和为一半,看是否可以更新答案。
if(sum == half) {
ans = min(ans,depth);
return;
}
//减枝
if(sum>half || depth>=ans) return;
for(int i = 0; i < 4; i++){
int dx = x + dir[i][0];
int dy = y + dir[i][1];
if(dx>=0&&dx<row&&dy>=0&&dy<col&&vis[dx][dy]==0) {
vis[dx][dy] = 1;
dfs(dx,dy,sum+Map[dx][dy],depth+1);
vis[dx][dy] = 0;
}
}
}
int main() {
while(~scanf("%d%d",&col,&row)) {
int sum = 0;
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
scanf("%d",&Map[i][j]);
sum += Map[i][j];
}
}
//题目给出数据无法平分。
if(sum%2) {
printf("0\n");
}
else {
half = sum/2;
memset(vis,0,sizeof(vis));
ans = row*col;
vis[0][0] = 1;
dfs(0,0,Map[0][0],1);
printf("%d\n",ans);
}
}
return 0;
}
从第一个格子开始进行深搜,则搜到认为是划分在一起的,未搜到认为是另一部分。#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
using namespace std;
int row,col,ans,half;
int Map[15][15];
int vis[15][15];
int dir[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};
void dfs(int x,int y,int sum,int depth) {
//当前和为一半,看是否可以更新答案。
if(sum == half) {
ans = min(ans,depth);
return;
}
//减枝
if(sum>half || depth>=ans) return;
for(int i = 0; i < 4; i++){
int dx = x + dir[i][0];
int dy = y + dir[i][1];
if(dx>=0&&dx<row&&dy>=0&&dy<col&&vis[dx][dy]==0) {
vis[dx][dy] = 1;
dfs(dx,dy,sum+Map[dx][dy],depth+1);
vis[dx][dy] = 0;
}
}
}
int main() {
while(~scanf("%d%d",&col,&row)) {
int sum = 0;
for(int i = 0; i < row; i++) {
for(int j = 0; j < col; j++) {
scanf("%d",&Map[i][j]);
sum += Map[i][j];
}
}
//题目给出数据无法平分。
if(sum%2) {
printf("0\n");
}
else {
half = sum/2;
memset(vis,0,sizeof(vis));
ans = row*col;
vis[0][0] = 1;
dfs(0,0,Map[0][0],1);
printf("%d\n",ans);
}
}
return 0;
}
相关文章推荐
- 蓝桥杯 历届试题 剪格子 (dfs)
- 蓝桥杯 - 历届试题 剪格子
- 问题 1427: [蓝桥杯][历届试题]买不到的数目(两个数凑不出来的最大数)
- 问题 1426: [蓝桥杯][历届试题]九宫重排
- 历届试题 剪格子 (蓝桥杯)
- 问题 1443: [蓝桥杯][历届试题]数字游戏
- 蓝桥杯 历届试题 剪格子(dfs搜索)
- 蓝桥杯_ 历届试题 分考场 (图的着色问题)
- 问题 1435: [蓝桥杯][历届试题]国王的烦恼
- 蓝桥杯 历届试题 剪格子(记忆化搜索)
- 蓝桥杯 历届试题 剪格子
- 蓝桥杯:历届试题 剪格子【JAVA算法实现】
- 蓝桥杯 历届试题 剪格子(dfs搜索)
- 蓝桥杯历届试题 剪格子
- 蓝桥杯 - 历届试题 - 正则问题(用非递归的方法)
- 蓝桥杯 历届试题 剪格子 简单的DFS~~注意输入有陷阱~~
- 问题 1433: [蓝桥杯][历届试题]危险系数
- 蓝桥杯历届试题 错误票据(排序(注意超时问题!!!))
- 蓝桥杯历届试题 日期问题
- 蓝桥杯 历届试题 剪格子