algorithm - 遍历从 (0,0,0) 到 (5,5,5) 的所有路径

标签 algorithm iteration sequential

我确定我想要实现的目标有一个名称或方法,但是正如您可以从这个问题的有点模糊的标题中判断的那样,我只是不知道如何表达它,因此我遇到了麻烦搜索。

这是我想做的:

我有一个包含几种可能状态的项目列表。为简单起见,我们称项目 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/

相关文章:

python - 数据帧分割和丢弃

firefox - 在同一个 Firefox 实例上顺序运行 Selenium 测试

python - Keras - 通过测试所有可能的超参数来调整顺序模型

algorithm - 计算子矩形总和的算法也允许更新

algorithm - BFS 不可能找到的最短路径?

rust - 如何将枚举的向量转换为该枚举的特定变体的内部值的向量

c - 搜索可以用基本情况编写为递归的函数示例

c - 顺序逐字节比较

javascript - 有没有一种有效的方法来测试一个字符串是否包含不重叠的子字符串来匹配正则表达式数组?

git - 一种基于统计数据在 Github 存储库的所有开发人员之间分配付款的好算法