Решение задачи о назначениях методом исчерпывающего перебора - 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). Проходясь по массиву работников мы выбираем себе работягу. По сути все.