用check函式檢查工人是不是在做同乙份工作,是返回false,否則返回true。函式backtrack實現對第k層子樹進行搜尋。當引數k的值大於n時,表示已經搜尋至葉子結點,此時得到問題的乙個解,判斷是否是最低費用,是就賦值給best。當k的值小於等於n時,此時訪問的是狀態空間樹的內部結點,該結點有n個(未剪枝時)子結點,逐一進行試探,由函式check進行檢測,根據檢測是否是合法放置,進行深度優先的遞迴搜尋,或者進行剪枝操作,剪去有衝突的子樹。
#include
using
namespace std;
int a[21]
[21];
int best=
200,cv=0;
int n;
int b[21]
;bool
check
(int k)
return
true;}
void
backtrack
(int k)
return;}
else
cv -
= a[k]
[i];}}
}int
main()
}backtrack(1
);cout << best;
return0;
}
工作分配問題
問題 設有n件工作分配給n個人,將工作i分配給第j個人所需的菲傭為cij,試設計乙個演算法,為每乙個人分配一件不同的工作,並使總費用達到最小。輸入 第一行有乙個正整數n,接下來n行,每行n個數,表示工作費用。輸入 最小總費用 例子 輸入 3 10 2 3 2 3 4 3 4 5 輸出 9 inclu...
工作分配問題
時間限制 1 sec 記憶體限制 128 mb 提交 10 解決 7 您該題的狀態 已完成 提交 狀態 討論版 設有n件工作分配給n個人,將工作i分配給第j個人費用為cij,為每個人分配一件不同的工作,對於給定的工作費用,計算最佳工作分配方案,使得中費用達到最小。第一行有1個正整數 1 n 20 接...
工作分配問題
problem description 設有n件工作分配給n個人。將工作i分配給第j個人所需的費用為 cij。試設計乙個演算法,為每乙個人都分配1 件不同的工作,並使總費用達到最小。設計乙個演算法,對於給定的工作費用,計算最佳工作分配方案,使總費用達到最小。input 輸入資料的第一行有1 個正整數...