• 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);
        }
    }
    
  • 相关阅读:
    django channle的使用
    显示react配置
    细思极恐-你真的会写java吗?
    Java String 面试题以及答案
    2017年--10年java大神告诉你开发最常用的百分之二十的技术有哪些?
    2017常见的50道java基础面试题整理(附答案)
    java如何填写简历?(干货篇)
    你所不知道的 Java 之 HashCode
    Java一般要学多久?
    Java 线程的中断机制
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12947662.html
Copyright © 2020-2023  润新知