SlideShare uma empresa Scribd logo
1 de 9
게임 인공지능
                                                                   GameAI




                 그래프 Class 구현
                 By Changhoon Park
                 http://changhoonpark.wordpress.com
                                                      Last Update : 2011. 08. 28

11년 8월 30일 화요일
2




                 그래프 Class 구현   자료구조         인접 행렬
                                노드(Node)     인접 리스트
                                에지(Edge)
                                그래프(Graph)
                                                            By Changhoon Park
                                                      http://changhoonpark.wordpress.com

11년 8월 30일 화요일
3




                 그래프 Class 구현   자료구조         인접 행렬
                                노드(Node)     인접 리스트
                                에지(Edge)
                                그래프(Graph)
                                                            By Changhoon Park
                                                      http://changhoonpark.wordpress.com

11년 8월 30일 화요일
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.com

11년 8월 30일 화요일
5




                 template < class extra_info = void*>
                 class NavGraphNode : public GraphNode
                 {
                 protected:
                    //the node's position
                    Vector2D m_vPosition;
                    extra_info m_ExtraInfo;
                 public:
                    /*INTERFACE OMITTED */
                 };




                 그래프 Class 구현   자료구조
                                노드(Node)
                                에지(Edge)
                                그래프(Graph)
                                                               By Changhoon Park
                                                         http://changhoonpark.wordpress.com

11년 8월 30일 화요일
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.com

11년 8월 30일 화요일
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.com

11년 8월 30일 화요일
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.com

11년 8월 30일 화요일
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.com

11년 8월 30일 화요일

그래프 Class 구현

  • 1. 게임 인공지능 GameAI 그래프 Class 구현 By Changhoon Park http://changhoonpark.wordpress.com Last Update : 2011. 08. 28 11년 8월 30일 화요일
  • 2. 2 그래프 Class 구현 자료구조 인접 행렬 노드(Node) 인접 리스트 에지(Edge) 그래프(Graph) By Changhoon Park http://changhoonpark.wordpress.com 11년 8월 30일 화요일
  • 3. 3 그래프 Class 구현 자료구조 인접 행렬 노드(Node) 인접 리스트 에지(Edge) 그래프(Graph) By Changhoon Park http://changhoonpark.wordpress.com 11년 8월 30일 화요일
  • 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.com 11년 8월 30일 화요일
  • 5. 5 template < class extra_info = void*> class NavGraphNode : public GraphNode { protected: //the node's position Vector2D m_vPosition; extra_info m_ExtraInfo; public: /*INTERFACE OMITTED */ }; 그래프 Class 구현 자료구조 노드(Node) 에지(Edge) 그래프(Graph) By Changhoon Park http://changhoonpark.wordpress.com 11년 8월 30일 화요일
  • 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.com 11년 8월 30일 화요일
  • 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.com 11년 8월 30일 화요일
  • 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.com 11년 8월 30일 화요일
  • 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.com 11년 8월 30일 화요일