2014-01-22 118 views
0

我知道這種類型的問題是以前問的,特別是在這個網站上,但我看到數百個答案,只是沒有滿足我的需要。我很抱歉問這樣一個通用的問題。C++ ntree實體樹實現

我需要一個樹實現來爲我在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

+0

我仍在尋找答案。在此先感謝..... –

回答

0

如果我正確地理解了你,你需要這樣的東西嗎?

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); 
+0

是的,我自己實現了一個非常相似的結構。 –