1. 程式人生 > >第五章上機實驗

第五章上機實驗

lag 設有 一個人 pre ktr 排列樹 cpp wap 不同的

1. 實踐題目 :

  工作分配問題

2. 問題描述 :

   設有n件工作分配給n個人,將工作i分配給第j個人所需的費用為cij,對於給定的工作費用,為每一個人都分配1 件不同的工作,設計一個算法,並使總費用達到最小。

3. 算法描述 :

  1)解空間 : 其解空間為一顆排列樹,類似於旅行售貨員問題的解空間。

  2)解空間樹 : 當n = 3時,其解空間樹如下

              (A)

               | 1   

              (B)

        2 /     3|     \ 4

        (C)    (D)      (E)

      3 /   \ 4  2 /  \ 4  2 /  \ 3

      (F)   (G)  (H)  (I)  (J)   (K)

      4 |    | 3 4 |   | 2 3 |   | 2

      (L)   (M)  (O)  (P) (R)  (S)

(四)剪枝函數:

for(int i=t; i<=n; i++){
            if(bestf > nf){ //剪枝,僅當bestf > nf時才進入搜索,否則跳過
                nf += fee[t][flag[i]];
                swap(flag[t], flag[i]);
                Backtrack(t + 1);
                swap(flag[t], flag[i]);
                nf -= fee[t][flag[i]];
            }

        }

  

第五章上機實驗