Skip to content
Snippets Groups Projects
Commit 1c461b64 authored by Antoine Pietri's avatar Antoine Pietri
Browse files

java/Traversal: add findCommonDescendant

parent 71ce9805
No related branches found
No related tags found
No related merge requests found
package org.softwareheritage.graph.algo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Random;
import java.util.Stack;
import java.util.*;
import it.unimi.dsi.bits.LongArrayBitVector;
......@@ -446,4 +437,48 @@ public class Traversal {
Collections.reverse(path);
return path;
}
public Long findCommonDescendant(long lhsNode, long rhsNode) {
Queue<Long> lhsStack = new ArrayDeque<>();
Queue<Long> rhsStack = new ArrayDeque<>();
HashSet<Long> lhsVisited = new HashSet<>();
HashSet<Long> rhsVisited = new HashSet<>();
lhsStack.add(lhsNode);
rhsStack.add(rhsNode);
lhsVisited.add(lhsNode);
rhsVisited.add(rhsNode);
this.nbEdgesAccessed = 0;
Long curNode;
while (!lhsStack.isEmpty() || !rhsStack.isEmpty()) {
if (!lhsStack.isEmpty()) {
curNode = lhsStack.poll();
nbEdgesAccessed += graph.degree(curNode, useTransposed);
for (long neighborNodeId : new Neighbors(graph, useTransposed, edges, curNode)) {
if (!lhsVisited.contains(neighborNodeId)) {
if (rhsVisited.contains(neighborNodeId))
return neighborNodeId;
lhsStack.add(neighborNodeId);
lhsVisited.add(neighborNodeId);
}
}
}
if (!rhsStack.isEmpty()) {
curNode = rhsStack.poll();
nbEdgesAccessed += graph.degree(curNode, useTransposed);
for (long neighborNodeId : new Neighbors(graph, useTransposed, edges, curNode)) {
if (!rhsVisited.contains(neighborNodeId)) {
if (lhsVisited.contains(neighborNodeId))
return neighborNodeId;
rhsStack.add(neighborNodeId);
rhsVisited.add(neighborNodeId);
}
}
}
}
return null;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment