in computer-algorithm/src/main/java/org/apache/hugegraph/computer/algorithm/centrality/betweenness/BetweennessCentrality.java [127:161]
private void forward(ComputationContext context, Vertex vertex,
IdList sequence, IdSet arrivingVertices) {
if (sequence.size() == 0) {
return;
}
BetweennessValue value = vertex.value();
IdSet arrivedVertices = value.arrivedVertices();
Id source = sequence.get(0);
// The source vertex is arriving at first time
if (!arrivedVertices.contains(source)) {
arrivingVertices.add(source);
SeqCount seqCount = this.seqTable.computeIfAbsent(
source, k -> new SeqCount());
seqCount.totalCount++;
// Accumulate the number of shortest paths for intermediate vertices
for (int i = 1; i < sequence.size(); i++) {
Id id = sequence.get(i);
Map<Id, Integer> idCounts = seqCount.idCount;
idCounts.put(id, idCounts.getOrDefault(id, 0) + 1);
}
Id selfId = vertex.id();
sequence.add(selfId);
BetweennessMessage newMessage = new BetweennessMessage(sequence);
for (Edge edge : vertex.edges()) {
Id targetId = edge.targetId();
if (this.sample(selfId, targetId, edge) &&
!sequence.contains(targetId)) {
context.sendMessage(targetId, newMessage);
}
}
}
}