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

    人生苦短,及时行乐
  • 相关阅读:
    ios存储 plist 偏好设置 自定义对象存储
    Spring中Bean的生命中期与InitializingBean和DisposableBean接口
    Spring中BeanPostProcessor
    cxf
    ios快捷键
    UIPickerView
    ios通知-kvo
    7.python 装饰器
    5.python内置函数
    4.python 深拷贝 浅拷贝 函数 匿名函数lambda
  • 原文地址:https://www.cnblogs.com/lang-zi/p/13821471.html
Copyright © 2011-2022 走看看