• 任务分配算法


    n个人n个任务进行分配,每个人一个任务,每个人分配任务的成本不同,求最小的分配成本

    public class 任务分配 {
        //测试用,将n设置为4个任务;
        static int n=4;
        //sum代表最终任务分配的最小价值,初始将任务设置为最大值
        static int sum=Integer.MAX_VALUE;
        //vis数组是一个标志位(索引0没有使用,索引1-4对应4个任务,
        // 数组元素值为1,表明对应任务被别人分配
        static int[] vis=new int[5];
        //行是人,列是任务
        //0行0列无用,初始为0
        static int[][] a={
                {0,0,0,0,0},
                {0,1,2,3,4},
                {0,4,3,2,1},
                {0,2,2,2,2},
                {0,1,1,1,1},
        };

        public static void main(String[] args) {
            work(1,0);
            System.out.println(sum);
        }

        /**
         *
         * @param i  当前为第i个人分配任务,
         * @param count 当前任务了的任务所需的成本
         */
        static void work(int i, int count)
        {
            if (i > n && count < sum)//分配完最后一个人,并且当前分配的成本小于之前的成本
            {
                sum = count;
                return;
            }

            if (count < sum)//如果没分配到最后一个人,并且当前分配的成本小于之前分配的最小成本。
                            //否则直接退出
            {
                for (int j = 1; j <= n; j++)
                {
                    if (vis[j] == 0)//只有当前任务没有被分配才进入if语句
                    {
                        vis[j] = 1;//试探
                        work(i + 1, count + a[i][j]);//递归调用,为下一个人分配
                        vis[j] = 0;//回溯
                    }
                }
            }
        }
    }

    人生苦短,及时行乐
  • 相关阅读:
    php 请求另一个服务器接口返回数据
    yii2 安装
    无限分类的
    程序员学习能力提升三要素转载
    为什么有的人工作多年还是老样子
    随笔杂谈
    Ecshop商品描述上传中文名图片无法显示解决方法
    「PSR 规范」PSR-2 编码风格规范
    leetcode 之Set Matrix Zeroes(10)
    leetcode 之Plus One(9)
  • 原文地址:https://www.cnblogs.com/lang-zi/p/13821471.html
Copyright © 2020-2023  润新知