3. 工作分配問題(回溯法)設有n件工作分配給n個人。。。
問題描述:
設有n件工作分配給n個人。將工作i分配給第j個人的費用為cij,請設計演算法,為每個人都分配1件不同的工作,並使得總費用達到最小。
實現提示:該問題的解空間是一棵排列樹,可用搜尋排列樹的回溯框架實現。
輸入樣例
3
10 2 3
2 3 4
3 4 5
輸出樣例
9
原始碼
#include<iostream>
#include<climits>
using namespace std;
int work[100];// 工作陣列,用於儲存工作編號
int work_fee[100][100];// 每個工人對應的每個工作的費用
int n, minsum= INT_MAX, newsum=0;// n表示工人個數,minsum表示最小費用和,newsum表示最新費用和
void backTrack(int k) {
int number; // 工作編號
if (k > n) {// 到達葉子節點
if (newsum < minsum) { // 當最新費用小於當前最小費用時,更新最小費用
minsum = newsum;
}
return;
}
else {// 未到達葉子節點,繼續
for (int i = k; i <= n; i++) {
number = work[i]; // 工作編號
newsum = newsum + work_fee[k][number];// 將當前工人k的number號工作加入最新工作費用
swap(work[k], work[i]);// 交換兩個位置上的工作編號
if (newsum < minsum) { //當最新費用小於當前最小費用,繼續下一個數
backTrack(k + 1);
}
swap(work[k], work[i]);// 還原之前交換的工作編號
newsum = newsum - work_fee[k][number];// 減去之前加入的數
}
}
}
int main() {
cin >> n; // 輸入工人數
for (int i = 1; i <=n; i++) { // 初始化工作費用
for (int j = 1; j <= n; j++) {
cin >> work_fee[i][j];
}
}
for (int i = 1; i <= n; i++) {// 初始化工作編號
work[i] = i;
}
backTrack(1);// 回溯查詢
cout << minsum << endl; // 輸出最小費用
return 0;
}
相關文章
- 回溯法(排列樹)解決八(N)皇后問題
- n皇后問題--回溯法,以DFS的方式搜尋
- 利用遺傳學演算法求解工作分配問題演算法
- N皇后問題
- 無題號 分配問題 題解
- [20210625]find -mtime +N N -N時間問題補充.txt
- [20210626]find -mtime +N N -N時間問題補充.txt
- 如何分配和跟蹤專案工作量?
- [20210624]find -mtime +N N -N的時間範圍問題.txt
- SAP 費用分攤分配用法(KSU5/KSV5/KB21N/KB11N)
- 大公司的工作流程及時間分配
- SEO專案操作在不同階段的工作分配
- 記憶體分配問題處理記憶體
- 給定一個n,輸出從1到n的整數
- 2022-07-17:1、2、3...n-1、n、n、n+1、n+2... 在這個序列中,只有一個數字有重複(n)。 這
- 服務人員在Hybris ASM手動分配coupon給某個客戶ASM
- typescript type 分配條件型別TypeScript型別
- 7-22 n queens (10分) 八皇后(n皇后)問題
- 輸入N,再輸入N個數,N
- [20181229]關於字串的分配問題.txt字串
- Mybatis N+1問題解析MyBatis
- HDU - 2553 N皇后問題(DFS)
- 回溯法求迷宮問題
- 透過劫持執行緒arena實現任意地址分配 n1ctf2018_null執行緒TF2Null
- Facebook 小遊戲 google play 商店這個區域分配問題遊戲Go
- n元語法
- Kubernetes EKS 叢集中的 IP 地址分配問題
- 請問什麼時候物件分配會不在 TLAB 內分配物件
- 2020-11-18 N皇后問題
- N皇后問題(各種優化)優化
- Leetcode 通過率最高的困難題 N皇后 II 【回溯解法-剪枝】LeetCode
- 小計:引用型別記憶體分配問題型別記憶體
- [20210528]oracle大表空間預分配問題.txtOracle
- [效能]【JVM】關於JVM記憶體的N個問題JVM記憶體
- 3n+1問題的考察及python程式設計Python程式設計
- N個人,按M進行分組
- Spartacus i18n 配置相關程式碼的工作原理
- C(Y,n)一元n次方的構造法