MCPcopy Create free account
hub / github.com/easy-graph/Easy-Graph / plain_bfs

Function plain_bfs

cpp_easygraph/functions/components/connected.cpp:12–41  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10#define gmin(x, y) x = x < y? x: y
11
12py::object plain_bfs(py::object G, py::object source) {
13 Graph& G_ = G.cast<Graph&>();
14 node_t source_id = G_.node_to_id.attr("get")(source).cast<node_t>();
15 adj_dict_factory& G_adj = G_.adj;
16 std::unordered_set<node_t> seen;
17 std::unordered_set<node_t> nextlevel;
18 nextlevel.emplace(source_id);
19 py::list res = py::list();
20 while (nextlevel.size()) {
21 std::unordered_set<node_t> thislevel = nextlevel;
22 nextlevel = std::unordered_set<node_t>();
23 for (std::unordered_set<node_t>::iterator i = thislevel.begin(); i != thislevel.end(); i++) {
24 node_t v_id = *i;
25 if (seen.find(v_id) == seen.end()) {
26 seen.emplace(v_id);
27 adj_attr_dict_factory& v_adj = G_adj[v_id];
28 for (adj_attr_dict_factory::iterator j = v_adj.begin(); j != v_adj.end(); j++) {
29 node_t neighbor_id = j->first;
30 nextlevel.emplace(neighbor_id);
31 }
32 }
33 }
34 }
35
36 for (std::unordered_set<node_t>::iterator i = seen.begin(); i != seen.end(); i++) {
37 node_t res_id = *(i);
38 res.append(G_.id_to_node.attr("get")(res_id));
39 }
40 return res;
41}
42
43py::object connected_component_undirected(py::object G) {
44 Graph& G_ = G.cast<Graph&>();

Callers

nothing calls this directly

Calls 2

appendMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected