Решение задачи о назначениях методом исчерпывающего перебора - EcsFlash/DataTypes GitHub Wiki
Задача о назначениях звучит так: Имеется n работников, которые должны выполнять n заданий, по одному заданию каждый(т.е. каждому работнику назначается только одно задание, и каждое задание ставится только одному человеку).Стоимость выполнения iтым работником jого задания известна и равна С[i,j].Надо распределить задания между работниками таким образом, чтобы они были выполнены с наименьшей общей стоимостью.
int appointments(int index, int n, int** mas, int cost,bool* jobs)
{
if (index == n)
return cost;
int min_cost = INT_MAX;
for (int i = 0;i < n;i++)
{
if (!jobs[i])
{
jobs[i] = true;
int c = appointments(index + 1, n, mas, cost + mas[index][i], jobs);
min_cost = min(c, min_cost);
jobs[i] = false;
}
}
return min_cost;
}
В этом решении мы используем массив назначений(mas) и массив работников(jobs). Проходясь по массиву работников мы выбираем себе работягу. По сути все.