Skip to main content

Routes Between Nodes

package graphs;

import graphs.commons.Node;
import graphs.commons.State;

import java.util.LinkedList;

class RoutesBetweenNodes {
public static void main(final String[] args) throws CloneNotSupportedException {
final Node n1 = new Node(1);
final Node n2 = new Node(2);
final Node n3 = new Node(3);
final Node n4 = new Node(4);
final Node n5 = new Node(5);
final Node n6 = new Node(6);
final Node n7 = new Node(7);
final Node n8 = new Node(8);
final Node n9 = new Node(9);

n1.nodes.add(n2);

n2.nodes.add(n3);
n2.nodes.add(n4);

n4.nodes.add(n5);
n4.nodes.add(n6);
n5.nodes.add(n7);
n7.nodes.add(n8);
n8.nodes.add(n9);

final Node n10 = new Node(10);
final Node n11 = new Node(11);
final Node n12 = new Node(12);

n10.nodes.add(n11);
n11.nodes.add(n10);
n10.nodes.add(n12);

assert isNodeConnected(n1.deepCopy(), n2.deepCopy());
assert isNodeConnected(n1.deepCopy(), n9.deepCopy());
assert isNodeConnected(n1.deepCopy(), n7.deepCopy());
assert isNodeConnected(n1.deepCopy(), n5.deepCopy());

assert !isNodeConnected(n1.deepCopy(), n10.deepCopy());
assert isNodeConnected(n11.deepCopy(), n10.deepCopy());
assert !isNodeConnected(n12.deepCopy(), n1.deepCopy());
System.out.println("Completed");

}

static boolean isNodeConnected(final Node sNode, final Node eNode) {
if (sNode == eNode)
return true;

final LinkedList<Node> list = new LinkedList<>();
list.add(sNode);
while (!list.isEmpty()) {
Node current = null;
current = list.removeFirst();
current.state = State.VISITED;
if (current.value == eNode.value) {
return true;
}
for (final Node n : current.nodes) {
if (n.state != State.VISITED) {
list.add(n);
}
}
}

return false;
}
}


Updated on 2021-02-03