• 大小: 7KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: Java
  • 标签: 装箱  二维装箱  

资源简介

多个车子,N个箱子,用二维矩形方式进行装车。采用二叉树实现。java

资源截图

代码片段和文件信息

package feng.dai.com.zx;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

/**
 * 神奇四侠

 * Created with IntelliJ IDEA.
 * Date:2019/3/21
 * Time:10:57
 *
 * @author Human Torch
 * @since JDK 1.8 

 * Copyright (c) 2019 imdada System Incorporated All Rights Reserved.
 */
public class baseBoxChoose {
    private static final Logger logger = LoggerFactory.getLogger(baseBoxChoose.class);
    /**
     * 当前车子的初始大小
     */
    protected CarBlock root;
    /**
     * 当前装箱的车子
     */
    protected Car car;

    protected List boxList;

    public baseBoxChoose(Car car List boxList) {
        this.car = car;
        this.boxList = boxList;
    }

    /**
     * 给箱子安排位置
     */
    public void fit() {

    }

    /**
     * 分解车厢面积
     *
     * @param carBlock
     * @param length
     * @param width
     */
    protected CarBlock splitCarBlock(CarBlock carBlock int length int width) {
        //当前位置被放了箱子了
        carBlock.setUsed(true);
        //箱子右边的大小
        CarBlock rightCarBlock = new CarBlock(carBlock.getX() + length carBlock.getY() carBlock.getLength() - length width);
        //箱子下边的大小
        CarBlock downCarBlock = new CarBlock(carBlock.getX() carBlock.getY() + width carBlock.getLength() carBlock.getWidth() - width);
        //设置当前箱子的右边及下遍的大小
        carBlock.setRight(rightCarBlock);
        carBlock.setDown(downCarBlock);
        return carBlock;
    }

    /**
     * 给箱子找个合适的位置
     * 没有地方可以放,则返回 null
     *
     * @param root   当前剩余的位置
     * @param length
     * @param width
     */
    protected CarBlock findCarBlock(CarBlock root int length int width Box box) {
        /**
         * 判断是否被使用了
         */
        if (root.isUsed()) {
            //如果被使用了。就看看他的右边或者下边是否还有位置
            CarBlock carBlock = findCarBlock(root.getRight() length width box);
            if (carBlock != null) {
                return carBlock;
            }
            return findCarBlock(root.getDown() length width box);
        } else if ((length <= root.getLength() && (width <= root.getWidth()))) {
            //就返回当前位置可以放箱子
            return root;
        } else if ((width <= root.getLength() && (length <= root.getWidth()))) {
            //旋转一下箱子
            box.setWidth(length);
            box.setLength(width);
            return root;
        } else {
            //没法放
            return null;
        }
    }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2811  2019-03-21 16:14  baseBoxChoose.java
     文件        1008  2019-03-21 11:42  Box.java
     文件        1076  2019-03-21 16:14  BoxChoose01.java
     文件        1082  2019-03-21 16:14  Car.java
     文件        1915  2019-03-21 11:16  CarBlock.java
     文件         954  2019-03-21 16:15  Container.java
     文件        2344  2019-03-21 16:31  Slaves.java
     文件        2236  2019-03-21 16:15  SortBlocks.java
     文件        2003  2019-03-21 16:28  TestMain.java

评论

共有 条评论