class QPanda::Graph

#include <Graph.h>

class Graph
{
public:
    // typedefs

    typedef Graph* Ref;
    typedef std::unique_ptr<Graph> uRef;
    typedef std::shared_ptr<Graph> sRef;

    // enums

    enum Kind;
    enum Type;

    // construction

    Graph(
        uint32_t n,
        Type ty = Undirected
        );

    // methods

    uint32_t inDegree(uint32_t i) const;
    uint32_t outDegree(uint32_t i) const;
    uint32_t size() const;
    std::set<uint32_t>& succ(uint32_t i);
    const std::set<uint32_t>& c_succ(uint32_t i) const;
    std::set<uint32_t>& pred(uint32_t i);
    std::set<uint32_t> adj(uint32_t i) const;

    void putEdge(
        uint32_t i,
        uint32_t j
        );

    bool hasEdge(
        uint32_t i,
        uint32_t j
        ) const;

    bool isWeighted() const;
    bool isArch() const;
    bool isDirectedGraph() const;
    std::string dotify(std::string name = "Dump") const;
    static bool ClassOf(const Graph* g);

    static uRef Create(
        uint32_t n,
        Type ty = Undirected
        );
};

// direct descendants

template <typename T>
class WeightedGraph;