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皇后問題遞迴
- N皇后問題
- 使用回溯演算法解決N皇后問題以及間隔排列問題演算法
- 無題號 分配問題 題解
- 如何分配和跟蹤專案工作量?
- SEO專案操作在不同階段的工作分配
- 大公司的工作流程及時間分配
- 記憶體分配問題處理記憶體
- new和malloc的地址分配問題
- typescript type 分配條件型別TypeScript型別
- Mybatis N+1問題解析MyBatis
- 回溯法求迷宮問題
- 席位分配問題——慣例Q值法和d'hondt法的MATLAB程式Matlab
- HDU 3600 Simple Puzzle 歸併排序 N*N數碼問題排序
- n元語法
- N皇后問題(各種優化)優化
- hibernate 1 + N 問題解決
- 阿里巴巴CEO馬雲談生活和工作的時間分配阿里
- 回溯法解決迷宮問題
- 回溯法解決喝酒問題 (轉)
- linux上Oracle的sga(HugePages)分配問題LinuxOracle
- 向《番茄工作法圖解》作者Staffan Nöteberg提問!(圖靈訪談)圖解圖靈
- 《單核工作法圖解》作者Staffan Nöteberg:讓生活和工作更高效的單核工作法單核圖解
- Spartacus i18n 配置相關程式碼的工作原理
- 請問什麼時候物件分配會不在 TLAB 內分配物件
- Scoro:詳解我們一天的工作時間分配(資訊圖)
- 小計:引用型別記憶體分配問題型別記憶體
- 【力扣】排列問題(回溯法)(去重)力扣
- Activiti 學習筆記12:分配個人任務筆記
- 回溯問題
- Leetcode 通過率最高的困難題 N皇后 II 【回溯解法-剪枝】LeetCode
- 【演算法題】任務分配問題---匈牙利演算法演算法
- 透過劫持執行緒arena實現任意地址分配 n1ctf2018_null執行緒TF2Null
- 3n+1問題的考察及python程式設計Python程式設計
- ST03N工作負載的後臺作業定義負載
- vue-router的router.go(n)問題?VueGo