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);
        }
    }
    
  • 相关阅读:
    Leetcode 16.25 LRU缓存 哈希表与双向链表的组合
    Leetcode437 路径总和 III 双递归与前缀和
    leetcode 0404 二叉树检查平衡性 DFS
    Leetcode 1219 黄金矿工 暴力回溯
    Leetcode1218 最长定差子序列 哈希表优化DP
    Leetcode 91 解码方法
    Leetcode 129 求根到叶子节点数字之和 DFS优化
    Leetcode 125 验证回文串 双指针
    Docker安装Mysql记录
    vmware虚拟机---Liunx配置静态IP
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077480.html
Copyright © 2011-2022 走看看