我有n个位置,每个位置有2 个可能的位置。
我想在 C++ 中使用循环探索所有这些可能性(或者如果有更好的选择的话)。
我正在考虑从 0 循环到 power(2,n) 并将其转换为二进制数,对于位置 j,取二进制数的第 j 位,使用 0 表示第一种可能性,使用 1 表示第二种可能性。
有没有更好的办法?因为这种做法引入了解析操作并且仅限于二进制位置问题,我的意思是如果问题对于每个位置都有更多的可能性我会遇到麻烦。
我有n个位置,每个位置有2 个可能的位置。
我想在 C++ 中使用循环探索所有这些可能性(或者如果有更好的选择的话)。
我正在考虑从 0 循环到 power(2,n) 并将其转换为二进制数,对于位置 j,取二进制数的第 j 位,使用 0 表示第一种可能性,使用 1 表示第二种可能性。
有没有更好的办法?因为这种做法引入了解析操作并且仅限于二进制位置问题,我的意思是如果问题对于每个位置都有更多的可能性我会遇到麻烦。
我会用以下方式概括这个问题(如果我理解你的问题的话):
创建一个函数,该函数将根据先前探索的候选函数bool nextVariant(const &prev_x, &new_x)生成一个新候选函数。然后你可以按如下方式组织你的代码(我用 C 风格的语法做了一个伪代码的草图)new_xprev_x
int main()
{
CandidateType x(0); //initialize the starting candidate (possibility)
do
{
performAnalysis(x); //do whatever you want with the candidate
CandidateType prev_x = x; //maybe you need to save it, maybe not....
bool isThereNext = nextVariant(prev_x,x);
}
while (isThereNext);
}
bool nextVariant(const CandidateType& prev_x, CandidateType& x)
{
if (notReachTheEnd)
{
//your logic to create x from prev_x. (assign x)
return true;
}
else return false;
}
这里,CandidateType是你的“可能性”的“类型”。您将根据您的问题来定义它,无论它是具有 2 个位置的 N 点,还是更复杂的东西。
有了这个,您将复杂性转移到从以前的可能性中产生新的可能性,这通常是一件容易的事情。由于我不确切知道产生这些“候选人”的可能意图是什么,我可能已经引入了某些可以避免的低效率。