2017年蓝桥杯软件类大学A组第4题 方格分割 答案 java

1 、题目描述
6x6 的方格,沿着格子的边线剪开成两部分。要求这两部分的形状完全相同。如图就是可
行的分割法。
试计算:包括这 3 种分法在内,一共有多少种不同的分割方法。注意:旋转对称的属于同一种
分割法。
2 、题解 又是暴搜。第 1 DFS ,第 2 BFS ,第 3 BFS ,这题又回到 DFS 。下一题估计是 BFS
倪文迪的话: 这道题可能上来会想到搜格子,但搜格子意味着更高的复杂度以及判连通的
需要,本题似乎搜索要切开的边更优。由题意,这一条切割线必定经过图的中心点,那么我们
一旦确定了半条到达边界的分割线,就能根据这半条对称画出另外半条。而由于结果中心对称
性,搜索出来的个数应该除以 4 得出最终结论。在搜索过程中需要注意的是,我们搜索出的半
条分割线不能同时经过关于中心对称的两个点,所以在标记时,需要将对称的点也标上。
中心点是 (3,3) ,从(3,3)出发,向右、向左、向上、向下,四个方向 DFS 即可
public class qiege {
	public static int bian = 7;
	public static int min = 0;
	public static int max = bian - 1;
	public static int ans = 0;
	public static int visited = 1;
	public static int novis = 0;
	public static int zhong = (int)((bian - 1) / 2);
	public static int[][] map = new int[bian][bian];
	public static void main(String[] args) {
		fenge(zhong, zhong);
		System.out.println(ans / 4);
	}
	
	public static void fenge(int i, int j) {
		if (map[i][j] == visited) {
			return;
		}
		if (map[max - i][max - j] == visited) {
			return;
		}
		if(i == min || i == max) {
			ans++;
			return ;
		}
		if (j == min || j == max) {
			ans++;
			return;
		}
		map[i][j] = visited;
		map[max - i][max - j] = visited;
		fenge(i + 1, j);
		fenge(i - 1, j);
		fenge(i, j + 1);
		fenge(i,  j -1);
		map[i][j] = novis;
		map[max - i][max - j] = novis;
	}
}

答案509

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值