75 std::map<ObjectId, bool> visited;
76 std::map<ObjectId, bool> isActive;
78 std::queue<ObjectId> activeId;
83 if (
mEdges[v].size() == 0) {
105 if (!visited[vid] && !isActive[vid]) {
107 isActive[vid] =
true;
112 for (
auto vid :
mEdges[v])
120 while (!activeId.empty())
152 int minLayler = maxLayer;
155 minLayler = std::min(minLayler,
mLayers[v]);
224 std::vector<std::vector<WNode>> weightedNodes(
mLayerNum);
226 auto compare_vertex = [=](
WNode n0,
WNode n1) ->
bool
228 return n0.
weight < n1.weight;
234 WNode ln = { v, 1.0f };
239 weightedNodes[
layer].push_back(ln);
242 for (
size_t t = 0; t <
mIterNum; t++)
245 for (
size_t l = 1; l < weightedNodes.size(); l++)
247 for (
size_t i = 0; i < weightedNodes[l].size(); i++)
250 ObjectId v = weightedNodes[l][i].id;
259 std::sort(weightedNodes[l].begin(), weightedNodes[l].end(), compare_vertex);
261 for (
size_t i = 0; i < weightedNodes[l].size(); i++)
263 ObjectId v = weightedNodes[l][i].id;
272 for (
size_t i = 0; i < weightedNodes[l].size(); i++)
275 ObjectId v = weightedNodes[l][i].id;
281 weightedNodes[l][i] = { v, sum /
mEdges[v].size() };
284 std::sort(weightedNodes[l].begin(), weightedNodes[l].end(), compare_vertex);
286 for (
size_t i = 0; i < weightedNodes[l].size(); i++)
288 ObjectId v = weightedNodes[l][i].id;
298 for (
size_t l = 0; l < weightedNodes.size(); l++)
300 for(
auto n : weightedNodes[l])
306 for (
size_t l = 0; l < weightedNodes.size(); l++)
308 weightedNodes[l].clear();
311 weightedNodes.clear();