第四届蓝桥杯--剪格子
2013-11-03 21:36
204 查看
import java.util.Scanner; public class Main7 { static int m, n; static int[][] num; static String s = ""; public static void main(String[] args) { Scanner input = new Scanner(System.in); m = input.nextInt(); n = input.nextInt(); num = new int [m]; int zh = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { num[i][j] = input.nextInt(); zh += num[i][j]; } } if (zh % 2 == 0) { int sum = zh / 2; f(num[0][0] + ";", sum - num[0][0], 0, 0, "0,0 "); } if (s.length() > 0) System.out.println(s.split(";").length); else System.out.println(0); } public static void f(String str, int sum, int x, int y, String xy) { if (sum == 0) { if (s.equals("")) s = str; else if (s.length() > str.length()) s = str; return; } if (sum < 0) return; if (x < m - 1 && !xy.contains((x + 1) + "," + y + " ")) f(str + num[y][x + 1] + ";", sum - num[y][x + 1], x + 1, y, xy + (x + 1) + "," + y + " "); if (x > 0 && !xy.contains((x - 1) + "," + y + " ")) f(str + num[y][x - 1] + ";", sum - num[y][x - 1], x - 1, y, xy + (x - 1) + "," + y + " "); if (y < n - 1 && !xy.contains(x + "," + (y + 1) + " ")) f(str + num[y + 1][x] + ";", sum - num[y + 1][x], x, y + 1, xy + x + "," + (y + 1) + " "); if (y > 0 && !xy.contains(x + "," + (y - 1) + " ")) f(str + num[y - 1][x] + ";", sum - num[y - 1][x], x, y - 1, xy + x + "," + (y - 1) + " "); } }
相关文章推荐
- 第四届蓝桥杯C++A组 剪格子
- 4000 【第四届蓝桥杯】剪格子
- 剪格子——第四届蓝桥杯省赛C语言A组第9题
- 蓝桥杯历届试题 剪格子
- 蓝桥杯 历届试题 剪格子 (dfs)
- 第四届蓝桥杯 省赛 JavaB组 世纪末的星期
- 蓝桥杯 操作格子(线段树)
- 蓝桥杯 算法训练 操作格子(线段树)
- 蓝桥杯 剪格子(dfs)
- 蓝桥杯 历届真题之剪格子(dfs)
- 蓝桥杯第四届预赛2马虎的算式
- 翻硬币-第四届蓝桥杯c/c++B组
- 第四届蓝桥杯C++B组 错误票据
- 第四届蓝桥杯C++A组 颠倒的价牌
- 第四届蓝桥杯第九题
- 蓝桥杯 格子中输出
- [蓝桥杯][历届试题]剪格子
- 2013第四届 蓝桥杯c/c++B组预赛 解题报告(还在更新中。。。。。)
- 蓝桥杯 历届试题 格子中输出(%*s的使用)
- 第四届蓝桥杯C/C++B组第五题