package iamrescue.routing.dijkstra; import java.util.ArrayList; import java.util.List; public class SimpleGraph { private List<Node> nodes; private int id = 0; public SimpleGraph() { nodes = new ArrayList<Node>(); } public Node addNode() { Node node = new Node(id); id++; nodes.add(node); return node; } public List<Node> getNodes() { return nodes; } /** * Adds edge (in one direction only) * * @param index1 * @param index2 * @param cost */ public void addEdge(int index1, int index2, double cost) { nodes.get(index1).addNeighbour(nodes.get(index2), cost); // nodes.get(index2).addNeighbour(nodes.get(index1), cost); } /** * Adds edge (in one direction only) * * @param index1 * @param index2 * @param cost */ public void addEdge(Node node1, Node node2, double cost) { node1.addNeighbour(node2, cost); // node2.addNeighbour(node1, cost); } public static class Node { private int id; private List<Node> neighbours = new ArrayList<Node>(); private List<Double> costs = new ArrayList<Double>(); public Node(int id) { this.id = id; } public int getID() { return id; } private void addNeighbour(Node node, double cost) { this.neighbours.add(node); this.costs.add(cost); } public List<Node> getNeighbours() { return neighbours; } public List<Double> getCosts() { return costs; } public void setCost(Node node, double newCost) { boolean done = false; for (int i = 0; i < neighbours.size(); i++) { if (neighbours.get(i).equals(node)) { costs.set(i, newCost); done = true; break; } } if (!done) { addNeighbour(node, newCost); } } public Double getCostToNeighbour(Node neighbour) { for (int i = 0; i < neighbours.size(); i++) { if (neighbours.get(i).equals(neighbour)) { return costs.get(i); } } return null; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Node other = (Node) obj; if (id != other.id) return false; return true; } } }