栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785969.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号