我确定我想要实现的目标有一个名称或方法,但是正如您可以从这个问题的有点模糊的标题中判断的那样,我只是不知道如何表达它,因此我遇到了麻烦搜索。
这是我想做的:
我有一个包含几种可能状态的项目列表。为简单起见,我们称项目 A、B 和 C 以及状态 0 到 5。
每个项目的状态在每一步中只能递增 1。在每个步骤中只能增加一个项目。在每个场景A开始时,B和C都为0。在每个场景A结束时,B和C都为5。
这将是最明显的场景示例。所有场景都将具有相同数量的步骤。
A 0 1 2 3 4 5 5 5 5 5 5 5 5 5 5 5
B 0 0 0 0 0 0 1 2 3 4 5 5 5 5 5 5
C 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5
我想遍历每一个可能的“决策路径”。我要在每一步执行计算,并且我要比较每个场景的值以确定哪个更好。以防万一还不清楚,下面是一个完全随机场景的示例,但最终会使用所需的算法运行。
A 0 0 0 0 0 0 1 1 2 3 4 5 5 5 5 5
B 0 1 2 2 3 3 3 4 4 4 4 4 4 4 5 5
C 0 0 0 1 1 2 2 2 2 2 2 2 3 4 4 5
是否有此类任务的名称或通用程序?不一定要寻找直接答案(会有额外收获),但至少要寻找一些关键词,以便我可以更有效地进行搜索!
提前致谢。
最佳答案
用五个 0
、五个 1
和五个 2
枚举所有可能的长度为 15 的单词。
0
代表A
增加,1
代表B
增加,2
表示 C
的增加。
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main(){
int n=5;
vector<int> u(3),v(3*n);
for (int i = 0; i < n; i++){
v[i] = 0; v[i+n] = 1; v[i+2*n] = 2;
}
do
{
fill(u.begin(),u.end(),0);
for (int j = 0; j < 3*n; j++){
for (int i = 0; i < 3; i++)
cout << u[i] << "\t";
cout << endl;
u[v[j]]++;
}
for (int i = 0; i < 3; i++)
cout << u[i] << "\t";
cout << endl;
cout << endl;
} while (next_permutation(v.begin(),v.end()));
return 0;
}
关于algorithm - 遍历从 (0,0,0) 到 (5,5,5) 的所有路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12966872/