第7届蓝桥杯大赛个人赛省赛(软件类)真题\Java语言B组\7

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36737934/article/details/88749641

题目描述:


剪邮票

如【图1.jpg】, 有12张连在一起的12生肖的邮票。
现在你要从中剪下5张来,要求必须是连着的。
(仅仅连接一个角不算相连)
比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。

请你计算,一共有多少种不同的剪取方法。

请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
 

直接上代码:

package wiki.zimo.exam07;

public class Demo07 {
	public static void main(String[] args) {
		int a[] = new int[12];
		int count = 0;
		for (a[0] = 0; a[0] < 2; a[0]++) {
			for (a[1] = 0; a[1] < 2; a[1]++) {
				for (a[2] = 0; a[2] < 2; a[2]++) {
					for (a[3] = 0; a[3] < 2; a[3]++) {
						for (a[4] = 0; a[4] < 2; a[4]++) {
							for (a[5] = 0; a[5] < 2; a[5]++) {
								for (a[6] = 0; a[6] < 2; a[6]++) {
									for (a[7] = 0; a[7] < 2; a[7]++) {
										for (a[8] = 0; a[8] < 2; a[8]++) {
											for (a[9] = 0; a[9] < 2; a[9]++) {
												for (a[10] = 0; a[10] < 2; a[10]++) {
													for (a[11] = 0; a[11] < 2; a[11]++) {
														if (a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9] + a[10] + a[11] == 5) {
															if (judge(a)) {
																count++;
																print(a);
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
		System.out.println(count);
	}
	
    public static boolean judge(int[] a) {
    	
    	int map[][] = new int[][] {
    		{a[0],a[1],a[2],a[3]},
    		{a[4],a[5],a[6],a[7]},
    		{a[8],a[9],a[10],a[11]}
		};
		
		int count = 0;
		for (int i = 0; i < map.length; i++) {
			for (int j = 0; j < map[i].length; j++) {
				if (map[i][j] == 1) {
					dfs(map,i,j);
					count++;
				}
			}
		}

		return count == 1;
	}

	public static void dfs(int[][] map, int i, int j) {
		map[i][j] = 0;
		
		if (i - 1 >= 0 && map[i - 1][j] == 1) {
			dfs(map, i - 1, j);
		}
		
		if (i + 1 <= map.length - 1 && map[i + 1][j] == 1) {
			dfs(map, i + 1, j);
		}
		
		if (j - 1 >= 0 && map[i][j - 1] == 1) {
			dfs(map, i, j - 1);
		}
		
		if (j + 1 <= map[i].length - 1 && map[i][j + 1] == 1) {
			dfs(map, i, j + 1);
		}
	}

	public static void print(int[] a) {
    	// TODO Auto-generated method stub
    	System.out.println(""+a[0]+a[1]+a[2]+a[3]);
    	System.out.println(""+a[4]+a[5]+a[6]+a[7]);
    	System.out.println(""+a[8]+a[9]+a[10]+a[11]);
    	System.out.println();
//    	System.out.println(Arrays.toString(a));
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36737934/article/details/88749641