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일 화요일