zoukankan      html  css  js  c++  java
  • java实现第七届蓝桥杯剪邮票

    剪邮票

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

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

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

    结果:116
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    import java.util.ArrayList;
    
    public class Main {
        public ArrayList<Integer> list = new ArrayList<Integer>();
        public static int[] A = {1,2,3,4,5,6,7,8,9,10,11,12};
        public static boolean[] visited = new boolean[5];
        public static long count = 0;
        
        public void dfs(int step) {
            while(step < A.length) {
                list.add(A[step]);
                if(list.size() == 5) {
                    if(check()) {
                        System.out.println(list);
                        count++;
                    }
                    
                }
                step++;
                dfs(step);
                list.remove(list.size() - 1);
            }
        }
        
        public boolean check() {
            for(int i = 0;i < 5;i++)
                visited[i] = false;
            int start = list.get(0);
            dfsPath(start, 0);
            for(int i = 0;i < 5;i++) {
                if(visited[i] == false)
                    return false;
            }
            return true;
        }
        
        public void dfsPath(int a, int i) {
            visited[i] = true;
            int start1 = a + 1;
            int start2 = a - 1;
            int start3 = a + 4;
            int start4 = a - 4;
            int r = (a - 1) / 4;
            if(list.contains(start1) && (start1 - 1) / 4 == r && !visited[list.indexOf(start1)])
                dfsPath(start1, list.indexOf(start1));
            if(list.contains(start2) && (start2 - 1) / 4 == r && !visited[list.indexOf(start2)])
                dfsPath(start2, list.indexOf(start2));
            if(list.contains(start3) && !visited[list.indexOf(start3)])
                dfsPath(start3, list.indexOf(start3));
            if(list.contains(start4) && !visited[list.indexOf(start4)])
                dfsPath(start4, list.indexOf(start4));
        }    
        
        public static void main(String[] args) {
            Main test = new Main();
            test.dfs(0);
            System.out.println(count);
        }
    }
    
  • 相关阅读:
    centos7.6 安装与配置 MongoDB yum方式
    MongoDB 介绍
    centos 关闭selinux
    前端 HTML标签属性
    前端 HTML 标签嵌套规则
    前端 HTML 标签分类
    前端 HTML body标签相关内容 常用标签 表单标签 form里面的 input标签介绍
    前端 HTML body标签相关内容 常用标签 表单标签 form 表单控件分类
    前端 HTML form表单标签 select标签 option 下拉框
    POJ 1426
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077480.html
Copyright © 2011-2022 走看看