有n件工作分配給n個人。將工作i分配給第j個人所需的費用為cij 。 設計乙個演算法,對於給定的工作費用,為每乙個人都分配1 件不同的工作,並使總費用達到最小。
使用回溯法排列樹找到每乙個解向量x,
其中i代表第i個工人,x[i]代表第i個工人分配的工作。
這樣在每次找到乙個解向量後,就可以計算出其費用,然後通過乙個變數就可以迭代出最小的費用。在排列樹的尋找過程中沒有約束條件。
輸入:
3
10 2 3
2 3 4
3 4 5
輸出:
9
**:
#include
//表示輸入的工人個數或者工作個數
int n;
//通過排列樹得到的解向量計算每次的開銷
int cost =0;
//得到cost後與之比較,保證得到的是最小值
int prev =
99999999
;//i代表第i個工人,x[i]代表第i個工人分配的工作。
int x[
100]
;//存放將工作i分配給第j個人所需的費用
int list[
100]
[100]=
;void
swap
(int
*a,int
*b)void
backtrack
(int t)
if(cost < prev)
cost =0;
}else}}
intmain
(void)}
for(
int i =
1; i <= n; i++
)backtrack(1
);printf
("%d\n"
, prev)
;}
工作分配問題 演算法設計
time limit 1000 ms memory limit 65536 kib 設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為 cij。試設計乙個演算法,為每乙個人都分配1 件不同的工作,並使總費用達到最小。設計乙個演算法,對於給定的工作費用,計算最佳工作分配方案,使總費用達到最小...
演算法分析之工作分配問題
acm中的工作分配問題是乙個典型的回溯問題,利用回溯思想能很準確地得到問題的解。下面就這個問題好好分析下。問題描述 設有n件工作分配給n個人。為第i個人分配工作j所需的費用為c i j 試設計乙個演算法,計算最佳工作分配方案,為每乙個人都分配1 件不同的工作,並使總費用達到最小。解題思路 由於每個人...
工作分配問題
問題 設有n件工作分配給n個人,將工作i分配給第j個人所需的菲傭為cij,試設計乙個演算法,為每乙個人分配一件不同的工作,並使總費用達到最小。輸入 第一行有乙個正整數n,接下來n行,每行n個數,表示工作費用。輸入 最小總費用 例子 輸入 3 10 2 3 2 3 4 3 4 5 輸出 9 inclu...