任務分配算法


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM