用c++写一个人数与任务数相等的蛮力法解决任务分配问题
时间: 2023-07-31 15:08:29 浏览: 47
好的,以下是用 C++ 实现人数与任务数相等的蛮力法解决任务分配问题的代码:
```c++
#include <iostream>
#include <vector>
#include <limits>
using namespace std;
int main() {
int n; // 人数与任务数
cin >> n;
vector<vector<int>> cost(n, vector<int>(n)); // cost[i][j] 表示第 i 个人完成第 j 个任务的代价
// 输入每个人完成每个任务的代价
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> cost[i][j];
}
}
vector<int> perm(n); // 用于存储当前的任务分配方案
for (int i = 0; i < n; i++) {
perm[i] = i;
}
int min_cost = numeric_limits<int>::max(); // 初始化最小代价为无穷大
// 枚举所有可能的任务分配方案并计算代价
do {
int cur_cost = 0;
for (int i = 0; i < n; i++) {
cur_cost += cost[i][perm[i]];
}
min_cost = min(min_cost, cur_cost);
} while (next_permutation(perm.begin(), perm.end()));
cout << min_cost << endl;
return 0;
}
```
这段代码中,我们首先输入人数与任务数,然后输入每个人完成每个任务的代价。接着,我们用一个长度为 n 的 perm 数组来存储当前的任务分配方案,初始化为 0~n-1。然后,我们枚举 perm 数组的所有排列,计算每种排列下的代价,最终得到最小代价。其中,`next_permutation` 函数用于得到下一个排列。