Вы можете использовать алгоритмический метод, называемый backtracking.
Или, в зависимости от того, сколько у вас игроков, вы можете использовать грубую силу и просто петлю. Например, вы можете использовать следующее, чтобы выбрать все комбинации из 2 форвардов и 1 центра (это пример C++, только что показанный, чтобы проиллюстрировать технику).
#include <iostream>
#include <fstream>
#include <algorithm>
#include <numeric>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main() {
vector<string> centers;
vector<string> forwards;
centers.push_back("joey");
centers.push_back("rick");
centers.push_back("sam");
forwards.push_back("steve");
forwards.push_back("joe");
forwards.push_back("harry");
forwards.push_back("william");
for(int i = 0; i < centers.size(); ++i) {
for(int j = 0; j < forwards.size(); ++j) {
for(int k = j+1; k < forwards.size(); ++k) {
printf("%s %s %s\n",centers[i].c_str(), forwards[j].c_str(), forwards[k].c_str());
}
}
}
return 0;
}
Выход:
---------- Capture Output ----------
> "c:\windows\system32\cmd.exe" /c c:\temp\temp.exe
joey steve joe
joey steve harry
joey steve william
joey joe harry
joey joe william
joey harry william
rick steve joe
rick steve harry
rick steve william
rick joe harry
rick joe william
rick harry william
sam steve joe
sam steve harry
sam steve william
sam joe harry
sam joe william
sam harry william
> Terminated with exit code 0.
Тем не менее, важно помнить, что если у вас есть много игроков, что вы делаете это «грубая сила», которая будет включать в себя возвраты (возвраты ту же самая идея как циклы, которые я использовал выше, только он использует рекурсию), будет расти экспоненциально во время работы. Так, например, для 5 человек реестра, если у вас есть 10 центров, 20 вперед и 18 охранников, то время работает в основном:
10 * 20 * 20 * 18 * 18 = 1.296.000
(20 * 20, потому что нам нужны 2 фола, и 18 * 18, потому что нам нужны 2 стража).
1,296,000 не так уж плохо для времени работы, но когда вы начинаете говорить о 9 человеческих реестрах, вы получаете намного больше времени работы, потому что теперь вы имеете дело с большим количеством комбинаций.
Таким образом, это зависит от того, сколько данных у вас есть, насколько это возможно.