DFS 蓝桥杯 剪格子
来源:互联网 发布:手机网络电视直播 编辑:程序博客网 时间:2024/05/05 01:08
问题描述
如下图所示,3 x 3 的格子中填写了一些整数。
+--*--+--+
|10* 1|52|
+--****--+
|20|30* 1|
*******--+
| 1| 2| 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
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
1 1 1 1
1 30 80 2
1 1 1 100
样例输出2
10
- #include<iostream>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- int m, n;//表格的宽度和高度
- int data[11][11];//格子中元素
- int visited[11][11];
- int sum;//表格中所有元素的和
- int s;
- int res;
- //int temp;
- int t;
- int moving[4][2] = { { 1, 0 }, { 0, 1 }, { -1, 0 }, { 0, -1 } };//移动的四个方向
- //int moving[4][2] = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } };
- int dfs(int x, int y,int temp)
- {
- if (temp == s)
- return 1;
- int r=0;
- for (int k = 0; k < 4; k++)
- {
- int i = x + moving[k][0];
- int j = y + moving[k][1];
- //边界检查
- if (i >= 0 && i < n&&j >= 0 && j < m)
- {
- if (visited[i][j] == 0 && temp + data[i][j] <= s)
- {
- visited[i][j] = 1;
- r = dfs(i, j,temp+data[i][j]);
- if (r)
- return r + 1;
- visited[i][j] = 0;
- }
- }
- }
- return 0;
- }
- int main()
- {
- while (cin >> m >> n)
- {
- memset(data, 0,sizeof(data));
- memset(visited, 0,sizeof(visited));
- sum = 0;
- //input
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- {
- cin >> data[i][j];
- sum += data[i][j];
- }
- }
- if (sum % 2 == 0)
- {
- s = sum / 2;
- //temp = data[0][0];
- if (data[0][0] == s)
- res = 1;
- else
- {
- visited[0][0] = 1;
- res=dfs(0, 0,data[0][0]);
- }
- }
- else//如果和为奇数,则不可能存在剪格子方法
- {
- res = 0;
- }
- cout << res << endl;
- }
- return 0;
- }
简单的DFS,不过很容易出错......写的时候一定要小心
0 0
- DFS 蓝桥杯 剪格子
- 蓝桥杯 剪格子(DFS)
- 蓝桥杯 剪格子 DFS
- 蓝桥杯,剪格子 (dfs)
- 蓝桥杯 剪格子(DFS)
- 蓝桥杯 剪格子(dfs)
- 蓝桥杯 剪格子 (DFS)
- 蓝桥杯-剪格子-dfs-java
- 蓝桥杯 剪格子(dfs)
- 蓝桥杯 - 剪格子 (简单DFS)
- 蓝桥杯--历届试题 剪格子(DFS)
- 蓝桥杯-- 历届试题 剪格子(dfs)
- 蓝桥杯——剪格子(DFS)
- 蓝桥杯 历届试题 剪格子 (dfs)
- 蓝桥杯—剪格子(dfs)
- [蓝桥杯] 历届试题 剪格子(dfs+回溯)
- 剪格子(dfs)
- 剪格子--dfs
- 只为你挥毫
- 翻硬币(贪心)
- 分享一些经验及心得(写完了)
- 整理 Dijkstra算法
- 树形DP 结点选择
- DFS 蓝桥杯 剪格子
- 如果还在学校,这些课有兴趣的可以关注一下
- STL中优先队列的使用
- 装箱问题
- 校门外的树(水题)
- 开心的金明(01背包)
- 入学考试
- 幂方分解(递归)
- Android Studio下集成ShareSDK