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);
        }
    }
    
  • 相关阅读:
    sed命令:删除匹配行和替换
    使用git rebase合并多次commit
    解决flask中文乱码的问题
    PyCharm 2017: Remote debugging using remote interpreter doesn't work
    ansible小结(八)ansible-playbook简单使用
    ansible命令参数介绍
    eclipse 代码自动提示
    oracle start with connect by prior 递归查询
    Android九宫图(draw9patch)
    Android 通过按钮弹出系统菜单(通过Button显示菜单)转
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077515.html
Copyright © 2011-2022 走看看