24 Aralık 2017 Pazar

graph add_edge metodu

add_edge - vertex1 + vertex2
Elimizde şöyle bir grap olsun
struct Vertex { int id; double data; };
struct Edge { float distance; };

typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS,
  Vertex, Edge> Graph; 
Olmayan bir vertex için edge ekleyelim.Otomatik olarak vertex yaratılır. Şöyle yaparız.
//add vertices
boost::add_vertex(Vertex{ 1, 1.1 }, g);

boost::add_edge(1, 2, g);

add_edge - vertex1 + vertex2 + edgeproperty + graph
Örnek  - float
Elimizde şöyle bir graph olsun
typedef boost::adjacency_list<boost::setS, boost::setS, boost::undirectedS, 
  uint32_t, float> Graph;
Vertex tipini tanımlamak için şöyle yaparız
typedef Graph::vertex_descriptor VertexType;
Vertex'leri eklemek için şöyle yaparız
Graph g;
VertexType v_0 = boost::add_vertex (g);
VertexType v_1 = boost::add_vertex (g);
VertexType v_2 = boost::add_vertex (g);
VertexType v_3 = boost::add_vertex (g);
Vertexleri birleştiren edge'leri eklemek için şöyle yaparız.
boost::add_edge (v_0, v_1, 1.0f, g);
boost::add_edge (v_2, v_3, 2.0f, g);
Örnek  - shared_ptr
Elimizde şöyle bir graph olsun.
using Graph = boost::adjacency_list<boost::vecS, boost::vecS,
  boost::directedS, boost::no_property, boost::shared_ptr<Obj> >;
using Vertex = Graph::vertex_descriptor;
Şöyle yaparız.
void addEdge(Vertex index, Vertex index2, const boost::shared_ptr<Obj> &edgeAttribute) {
  auto out = boost::add_edge(index, index2, edgeAttribute, _graph).first;
}
Örnek  - char
Elimizde şöyle bir graph olsun
typedef property<edge_name_t, char> edge_prop;
typedef property<vertex_name_t, char, property<vertex_index_t, int> > vertex_prop;

typedef adjacency_list<vecS, vecS, bidirectionalS, vertex_prop, edge_prop> Graph;
Vertexleri birleştiren edge'leri eklemek için şöyle yaparız.
add_edge(v_0,v_1, edge_prop('b'), g);
add_edge(v_2,v_3, edge_prop('a'), g);
Örnek  - float
Elimizde şöyle bir graph olsun
using EdgeWeightProperty = property<edge_weight_t, float>;

using ColorPropertyType = property<vertex_color_t, default_color_type>;

typedef adjacency_list<setS, // out edge container
                       vecS, // vertex container
                       undirectedS, // directed or undirected
                       ColorPropertyType, // vertex properites
                       EdgeWeightProperty> // edge properties
                       ;
Vertex'leri eklemeden direkt edge'leri eklemek için şöyle yaparız.
GraphType g(4);

EdgeWeightProperty e0 = 4.f;
add_edge(0, 1, e0, g);

EdgeWeightProperty e1 = 10.f;
add_edge(1, 2, e1, g);

EdgeWeightProperty e2 = 3.f;
add_edge(2, 3, e2, g);


Hiç yorum yok:

Yorum Gönder