package com.e2u.alg.match; import java.util.Map; import java.util.HashMap; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.Collection; public class AdjacencyList { private Map<Node, ArrayList<Edge>> adjacencies = new HashMap<Node, ArrayList<Edge>>(); public void addEdge(Node source, Node target, int weight){ ArrayList<Edge> list; if(!adjacencies.containsKey(source)){ list = new ArrayList<Edge>(); adjacencies.put(source, list); }else{ list = adjacencies.get(source); } list.add(new Edge(source, target, weight)); } public ArrayList<Edge> getAdjacent(Node source){ return adjacencies.get(source); } public void reverseEdge(Edge e){ adjacencies.get(e.from).remove(e); addEdge(e.to, e.from, e.weight); } public void reverseGraph(){ adjacencies = getReversedList().adjacencies; } public AdjacencyList getReversedList(){ AdjacencyList newlist = new AdjacencyList(); for(ArrayList<Edge> edges : adjacencies.values()){ for(Edge e : edges){ newlist.addEdge(e.to, e.from, e.weight); } } return newlist; } public Set<Node> getSourceNodeSet(){ return adjacencies.keySet(); } public Collection<Edge> getAllEdges(){ ArrayList<Edge> edges = new ArrayList<Edge>(); for(List<Edge> e : adjacencies.values()){ edges.addAll(e); } return edges; } }