【问题标题】:C++ ntree Solid Tree ImplementationC++ ntree实体树实现
【发布时间】:2014-01-23 04:36:57
【问题描述】:

我知道以前有人问过这种问题,尤其是在这个网站上,但我已经看到了数百个无法满足我需求的答案。很抱歉问了这么笼统的问题。

我需要一个树实现来为我在 C++ 中实现的国际象棋游戏生成可能的棋盘状态。所以这里是要求:

  • 只有一个头节点,
  • 多个(未知数量)子节点,
  • 树的未知(动态)高度
  • 树木不平衡,部分树枝可能会被砍掉

这是我要存储的数据:

// A tree's contents will only be composed of this variable
ChessModelConstants::ChessPiece m_gameBoard[8][8];

typedef char PieceType, PieceColor;

    //Variable is as follows
    struct ChessPiece {
    // A simple Constructor with default values
    ChessPiece(PieceType pieceType = ChessModelConstants::TYPE_EMPTY, 
               PieceColor pieceColor = ChessModelConstants::COLOR_WHITE) :
               m_pieceType(pieceType), m_pieceColor(pieceColor) 
    {
    }

    // Members
    PieceType m_pieceType;
    PieceColor m_pieceColor;
};

我在哪里可以找到/实现这样的树?我想提一下 Boost 目前对我来说不是一个选择。任何 STL 或强大的手动实现都可以。提前致谢。

PS:我找到了我目前正在调查的this 网站。

【问题讨论】:

  • 我仍在寻找答案。在此先感谢.....

标签: c++ tree


【解决方案1】:

如果我理解正确,你需要这样的东西吗?

template<typename T>
class TreeItem
{
public:
    TreeItem<T> (T data)
        : m_data (data)
    {
    }

    TreeItem<T> (const TreeItem& item)
        : m_data (item.m_data)
    {
        m_children = item.m_children;
    }

    TreeItem<T>& AddChild (TreeItem<T>& item)
    {
        m_children.push_back (item);
        return *m_children.rbegin();
    }

    TreeItem<T>& AddChild (T data)
    {
        m_children.push_back (TreeItem<T>(data));
        return *m_children.rbegin();
    }

    std::vector<TreeItem<T> >& GetChildren ()
    {
        return m_children;
    }

    T& GetData()
    {
        return m_data;
    }

private:
    T m_data;
    std::vector<TreeItem<T> > m_children;
};

// usage example
ChessBoard emptyBoard;

TreeItem<ChessBoard> root (emptyBoard);
root.AddChild (emptyBoard).AddChild(emptyBoard);

【讨论】:

  • 是的,我自己实现了一个非常相似的结构。
猜你喜欢
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
相关资源
最近更新 更多