java 麻将平胡算法

开始时用除将头后先除刻、再除顺,或者反过来,再判断余牌为0,但都不可能覆盖所有情况。接着,直接用了下面这个方法:因为有些地区麻将对将头有要求,所以将头做了参数。/***有将的牌是否能胡

 

   开始时用除将头后先除刻、再除顺,或者反过来,再判断余牌为0,但都不可能覆盖所有情况。

  接着,直接用了下面这个方法:

  因为有些地区麻将对将头有要求,所以将头做了参数。

  /**     * 有将的牌是否能胡     *     * @param numList 牌数集合     * @param pairs   将头数集合(有些平胡对将头有要求,比如258)     * @return 是否有可能     */    @NonNull    private static Boolean getMayHu(List<Integer> numList, @NonNull TreeSet<Integer> pairs) {        for (Integer n : pairs) {            /*先把将头拿出*/            List<Integer> tempList = new CopyOnWriteArrayList<>(numList);            tempList.remove(n);            tempList.remove(n);            List<List<Integer>> allMayLists = new CopyOnWriteArrayList<>();//所有可能的组合            Collections.sort(tempList);            allMayLists.add(tempList);            for (int i = 0; i < allMayLists.size(); i++) {                List<Integer> list = allMayLists.get(i);                List<Integer> shun = new ArrayList<>();//可能的顺子组合                Integer num1 = list.get(0);                shun.add(num1);                shun.add(num1 + 1);                shun.add(num1 + 2);                List<Integer> ke = new ArrayList<>();//刻子组合                ke.add(num1);                ke.add(num1);                ke.add(num1);                if (Objects.equals(list.get(0), list.get(1)) && Objects.equals(list.get(1), list.get(2))) {                    if (list.containsAll(shun)) {//有可能组顺子,则去掉顺子,加到前面                        List<Integer> newList = new ArrayList<>(list);                        newList.remove(shun.get(0));                        newList.remove(shun.get(1));                        newList.remove(shun.get(2));                        if (newList.size() == 0) {                            return true;                        }                        newList.add(0, shun.get(2));                        newList.add(0, shun.get(1));                        newList.add(0, shun.get(0));                        allMayLists.add(newList);//把顺调到第一顺序,再加入可能列表                    }                    List<Integer> delKeList = new ArrayList<>(list);                    delKeList.remove(ke.get(0));                    delKeList.remove(ke.get(1));                    delKeList.remove(ke.get(2));                    if (delKeList.size() == 0) {                        return true;                    }                    allMayLists.add(delKeList);//产生新的去刻再加到可能列表之后                } else if (list.containsAll(shun)) {                    List<Integer> delShunList = new ArrayList<>(list);                    delShunList.remove(shun.get(0));                    delShunList.remove(shun.get(1));                    delShunList.remove(shun.get(2));                    if (delShunList.size() == 0) {                        return true;                    }                    allMayLists.add(delShunList);//产生新的去刻再加到可能列表之后                }            }        }        return false;    }

  

本站部分文章来自网络或用户投稿,如无特殊说明或标注,均为本站原创发布。涉及资源下载的,本站旨在共享仅供大家学习与参考,如您想商用请获取官网版权,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
开发者

计算机零基础小白,适合学习编程吗?

2025-5-28 10:16:25

开发者

企业级自定义表单引擎解决方案(十三)--表单模板1

2025-5-28 10:19:24

搜索