演算法習題 工作分配問題

2021-10-13 07:10:41 字數 1025 閱讀 1357

有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...