SlideShare ist ein Scribd-Unternehmen logo
1 von 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일 화요일

Weitere ähnliche Inhalte

Mehr von Hoseo University

Mehr von Hoseo University (8)

목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동목적이 부여된 에이전트 행동
목적이 부여된 에이전트 행동
 
FoundationKit
FoundationKitFoundationKit
FoundationKit
 
Raven
RavenRaven
Raven
 
프로젝트 구성
프로젝트 구성프로젝트 구성
프로젝트 구성
 
구성(Composition)
구성(Composition)구성(Composition)
구성(Composition)
 
Objective-C에서의 OOP
Objective-C에서의 OOPObjective-C에서의 OOP
Objective-C에서의 OOP
 
Dt2210.01.syllabus
Dt2210.01.syllabusDt2210.01.syllabus
Dt2210.01.syllabus
 
Dt3160.01
Dt3160.01Dt3160.01
Dt3160.01
 

그래프 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일 화요일