Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

그래프 Class 구현

1,052 views

Published on

http://wawworld.me

changhoonpark@gmail.com

Published in: Education, Technology, Business
  • Be the first to comment

  • Be the first to like this

그래프 Class 구현

  1. 1. 게임 인공지능 GameAI 그래프 Class 구현 By Changhoon Park http://changhoonpark.wordpress.com Last Update : 2011. 08. 2811년 8월 30일 화요일
  2. 2. 2 그래프 Class 구현 자료구조 인접 행렬 노드(Node) 인접 리스트 에지(Edge) 그래프(Graph) By Changhoon Park http://changhoonpark.wordpress.com11년 8월 30일 화요일
  3. 3. 3 그래프 Class 구현 자료구조 인접 행렬 노드(Node) 인접 리스트 에지(Edge) 그래프(Graph) By Changhoon Park http://changhoonpark.wordpress.com11년 8월 30일 화요일
  4. 4. 4 class GraphNode { private: //every node has an index. A valid index is >= 0 int m_iIndex; public: GraphNode(): m_iIndex(invalid_node_index) {} GraphNode(int idx): m_iIndex(idx) {} virtual ~GraphNode() {} int Index() const; void SetIndex(int NewIndex); }; 그래프 Class 구현 자료구조 노드(Node) 에지(Edge) 그래프(Graph) By Changhoon Park http://changhoonpark.wordpress.com11년 8월 30일 화요일
  5. 5. 5 template < class extra_info = void*> class NavGraphNode : public GraphNode { protected: //the nodes position Vector2D m_vPosition; extra_info m_ExtraInfo; public: /*INTERFACE OMITTED */ }; 그래프 Class 구현 자료구조 노드(Node) 에지(Edge) 그래프(Graph) By Changhoon Park http://changhoonpark.wordpress.com11년 8월 30일 화요일
  6. 6. 6 class GraphEdge { protected: int m_iFrom; int m_iTo; double m_dCost; public: GraphEdge(int from, int to, double cost): m_dCost(cost), m_iFrom(from), m_iTo(to) {} GraphEdge(int from, int to):m_dCost(1.0), m_iFrom(from), m_iTo(to) {} GraphEdge():m_dCost(1.0), m_iFrom(invalid_node_index), m_iTo(invalid_node_index) {} virtual ~GraphEdge(){} int From() const; void SetFrom(int NewIndex); int To() const; void SetTo(int NewIndex); double Cost() const; void SetCost(double NewCost); }; 그래프 Class 구현 자료구조 노드(Node) 에지(Edge) 그래프(Graph) By Changhoon Park http://changhoonpark.wordpress.com11년 8월 30일 화요일
  7. 7. 7 template <class node_type, class edge_type> class SparseGraph { public: typedef edge_type EdgeType; typedef node_type NodeType; typedef std::vector<node_type> NodeVector; typedef std::list<edge_type> EdgeList; typedef std::vector<EdgeList> EdgeListVector; private: NodeVector m_Nodes; EdgeListVector m_Edges; bool m_bDigraph; int m_iNextNodeIndex; 그래프 Class 구현 자료구조 노드(Node) 에지(Edge) 그래프(Graph) By Changhoon Park http://changhoonpark.wordpress.com11년 8월 30일 화요일
  8. 8. 8 public: SparseGraph(bool digraph): m_iNextNodeIndex(0), m_bDigraph(digraph){} const NodeType& GetNode(int idx)const; NodeType& GetNode(int idx); const EdgeType& GetEdge(int from, int to)const; EdgeType& GetEdge(int from, int to); int GetNextFreeNodeIndex()const; int AddNode(NodeType node); void RemoveNode(int node); void AddEdge(EdgeType edge); void RemoveEdge(int from, int to); 그래프 Class 구현 자료구조 노드(Node) 에지(Edge) 그래프(Graph) By Changhoon Park http://changhoonpark.wordpress.com11년 8월 30일 화요일
  9. 9. 9 int NumNodes()const; int NumActiveNodes()const; int NumEdges()const; bool isDigraph()const; bool isEmpty()const; bool isPresent(int nd)const; bool Save(const char* FileName)const; bool Save(std::ofstream& stream)const; bool Load(const char* FileName); bool Load(std::ifstream& stream); void Clear(); class ConstEdgeIterator; class EdgeIterator; class NodeIterator; class ConstNodeIterator; }; 그래프 Class 구현 자료구조 노드(Node) 에지(Edge) 그래프(Graph) By Changhoon Park http://changhoonpark.wordpress.com11년 8월 30일 화요일

×