首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >树视图的决策树生成

树视图的决策树生成
EN

Stack Overflow用户
提问于 2017-10-15 18:24:21
回答 1查看 327关注 0票数 2

我正在尝试生成一个决策树,它将显示在一个TreeView中。这是一个足球游戏开发者的界面。它将允许用户向特定节点添加事件。我遇到的问题是生成所有的节点。当使用链接列表时,可以共享节点,其中路径交叉,但这不能在TreeView中使用,因为节点会被混淆。我在这里有一幅图像:

正如你所知,足球是一种球门事件游戏,一旦进球,我就进入树中的下一个节点。所以0-0的分数是起点。然后,该节点分裂为2个节点(1-0)和(0-1)。一旦上了一条路,树就需要迎合沿着这条路行驶的需要,但也要满足2-2,3-2,3-3等的需求。

因此,树中的每个节点都需要包含上一个分数的所有可能的解决方案。我相信你会明白的。

递归的最大得分或退出点定义为:(Home + Away) <8

我用: Recurse(rootNode,0,0)调用递归例程;

函数CreateNodeFromScore完成了奇特的节点创建,并且工作非常出色。

我的递归代码在这里:

代码语言:javascript
运行
复制
private void Recurse(TreeNode node, int iHome, int iAway) {

  if ((iHome + iAway) == 8 ) {
    return;
  }

  node.Nodes.Add( CreateNodeFromScore(iHome, iAway) );

  TreeNode nextNode = node.Nodes[0];
  Recurse(nextNode, ++iHome, iAway);
  Recurse(nextNode, iHome, ++iAway);
}

private void CreateNodeFromScore(int iHome, int iAway) {
    return new TreeNode(iHome.ToString() + " - " + iAway.ToString());
}

我已经尝试了很多方法来实现这个目标,但是这个解决方案却让我无法理解。

这是一个算法问题,而不是gui、treeview或C#、C++问题。代码可以在两种语言之间直接翻译。

有什么能帮到我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-16 10:37:50

我将在这里回答我自己的问题,因为我已经找到了答案。有趣的是,在这里发帖帮助我重新思考了这个问题,因为我觉得我很困惑。我感谢@dbc给我的建议和建议。

代码语言:javascript
运行
复制
private void Recurse(TreeNode node, int iHome, int iAway) {

  if ((iHome + iAway)> 7)
    return;

  var homeNode = CreateNodeFromScore(iHome +1, iAway);
  var awayNode = CreateNodeFromScore(iHome, iAway + 1);

  node.Nodes.Add(homeNode);
  node.Nodes.Add(awayNode);

  Recurse(homeNode, iHome +1, iAway);
  Recurse(awayNode, iHome, iAway +1);

}

产生这一结果:

https://i.imgur.com/ztnbRDA.png

我希望这可能对其他人有用。

安德里亚

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46758490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档