zoukankan      html  css  js  c++  java
  • 任务分配算法

    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;//回溯
                    }
                }
            }
        }
    }

    人生苦短,及时行乐
  • 相关阅读:
    python中将集合进行切割的方法
    Tomcat单库多实例部署
    (二) storm的基本使用
    工作流表结构解析
    [TCO 2012 Round 3A Level3] CowsMooing (数论,中国剩余定理,同余方程)
    [HEOI 2013 day2] 钙铁锌硒维生素 (线性代数,二分图匹配)
    [HEOI 2013 day2] SAO (树形动态规划)
    关于react和Angular的思考
    angular 中的modal
    从易到难,写一个JavaScript加载器之一
  • 原文地址:https://www.cnblogs.com/lang-zi/p/13821471.html
Copyright © 2011-2022 走看看