@Override public int hashCode() { int result = kmer != null ? kmer.hashCode() : 0; result = 31 * result + pos; result = 31 * result + (vertexType != null ? vertexType.hashCode() : 0); result = 31 * result + (missingFromGraph ? 1 : 0); result = 31 * result + cov; return result; }
public Vector<VertexType> acyclicSP(BaseGraph<VertexType, EdgeType> g, VertexType v) throws InvalidVertexException { BaseGraph<VertexType, EdgeType> gcopy = g.copy(gc); final Integer dist[] = new Integer[g.getVerticesCount()]; Vector<VertexType> prev = new Vector<VertexType>(); Queue<VertexType> Q = new LinkedList<VertexType>(); HashMap<VertexType, VertexType> gcopy2g = new HashMap<VertexType, VertexType>(); HashMap<Integer, VertexType> t = new HashMap<Integer, VertexType>(); for (VertexType type : gcopy) t.put(type.getId(), type); for (VertexType type : g) gcopy2g.put(t.get(type.getId()), type); for (int i = 0; i < dist.length; i++) dist[i] = Integer.MAX_VALUE; dist[v.getId()] = 0; for (VertexType u : gcopy) { if (gcopy.getInDegree(u) == 0) { Q.add(u); } } while (!Q.isEmpty()) { VertexType u = Q.poll(); Iterator<EdgeType> iet = gcopy.edgeIterator(u); while (iet.hasNext()) { EdgeType e = iet.next(); if ((dist[u.getId()] + e.getWeight()) < dist[e.target.getId()]) { dist[e.target.getId()] = dist[u.getId()] + e.getWeight(); prev.add(e.target.getId(), u); dispatchEvent( new PreWorkEvent<VertexType, EdgeType>(gcopy2g.get(e.target), gcopy2g.get(u), gcopy)); // System.out.println(e.target.getId()); } if (gcopy.getInDegree((VertexType) e.target) == 1) Q.add((VertexType) e.target); } gcopy.removeVertex(u); } return prev; }