2013蓝桥杯c语言C组第10题

标题:剪格子
如图p1.jpg所示,3 x 3 的格子中填写了一些整数。

在这里插入图片描述
我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60。

本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。
如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。   
如果无法分割,则输出 0

程序输入输出格式要求:

程序先读入两个整数 m n 用空格分割 (m,n<10)
表示表格的宽度和高度
接下来是n行,每行m个正整数,用空格分开。每个整数不大于10000
程序输出:在所有解中,包含左上角的分割区可能包含的最小的格子数目。

例如:
用户输入:
3 3
10 1 52
20 30 1
1 2 3

则程序输出:
3

再例如:
用户输入:
4 3
1 1 1 1
1 30 80 2
1 1 1 100

则程序输出:
10

(参见p2.jpg)

资源约定:
峰值内存消耗 < 64M
CPU消耗 < 5000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。

注意: main函数需要返回0
注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。
注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。

提交时,注意选择所期望的编译器类型。

/*	
   2013预赛c语言c组最后一题
	不多说直接DFS深搜

*/


#include<iostream>
using namespace std;
#define N 12


struct Map{
	int value; //权重
	int flage; //标记
}map[N][N];  //定义一个结构体二维数组来保存地图 


//定义一个全局变量用来记录结果的最小值 
int result=1000000;

//定义一个全局变量来保存输入数据的和
int s=0; 

//初始化地图 
void init(int row,int col){

	//多加两层行和列是为了解决边界判断问题
	//设置多加的两层行和列设置为不可访问 

	for(int i=0;i<=col+1;i++){
		map[0][i].flage=1;
		map[row+1][i].flage=1;
	}
	for(int i=0;i<=row+1;i++){
		map[i][0].flage=1;
		map[i][col+1].flage=1;	
	}

	for(int i=0;i<row;i++){
		for(int j=0;j<col;j++){
			
			cin>>map[i+1][j+1].value;
			s+=map[i+1][j+1].value;
			map[i+1][j+1].flage=0;
			
		}
	}
	
	
}
 

void dfs(int sum,int x,int y,int k){
	
	
	//更新到达该点的权重和	
	sum=sum+map[x][y].value;


 
	//递归出口 
	if(sum>s/2)
		return ;
	if(sum==s/2){
		result=result<k?result:k;
		return ;		
	}
	
	
	
	//方向数组 
	int dir[][2]={{1,0},{-1,0},{0,1},{0,-1}};
	
	
	//4个方向进行深度搜索 
	for(int i=0;i<4;i++){
		int x1=x+dir[i][0];
		int y1=y+dir[i][1];
		if(map[x1][y1].flage==0){
			map[x1][y1].flage=1;
			dfs(sum,x1,y1,k+1);
			map[x1][y1].flage=0;
		}	
	}
	
}


int main(){
	



	
	int row,col;
	cin>>col>>row;

	//初始化一个图为row=row+2 col=col+2; 
	init(row,col);
	
	//初始化 
	int x=1;
	int y=1;
	//标记当前点访问过 
	map[x][y].flage=1;
	//记录步数 
	int k=1;
	//记录当前当前权重和
	int sum=0; 
	
	
	dfs(sum,x,y,k);
	cout<<result;
	
	

	
	
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40066334/article/details/86355075