/**
* 有向图邻接表表示及反向图构造
*/
public class GraphReverse {
//vertex,顶点数目
private int v;
//edge,边数目
private int e;
//有向图的邻接表Map集合,key为某顶点,value为该顶点的邻接顶点集合
private Map<Integer,List<Integer>> adjacencyList;
//反向图的邻接表Map集合
private Map<Integer,List<Integer>> adjacencyListReverse;
//初始化
public GraphReverse(int vertex, int edge){
if(edge<0) throw new RuntimeException("Number of edges must be nonnegative");
if (edge > vertex*vertex) throw new RuntimeException("Too many edges");
v = vertex;
e = edge;
adjacencyList = new HashMap<Integer,List<Integer>>();
for(int i=0; i<v; i++){
adjacencyList.put(i, new ArrayList<Integer>());
}
adjacencyListReverse = new HashMap<Integer,List<Integer>>();
for(int i=0; i<v; i++){
adjacencyListReverse.put(i, new ArrayList<Integer>());
}
}
//获取有向图的邻接表
public Map<Integer,List<Integer>> getAdjacencyList(){
return adjacencyList;
}
//获取反向图的邻接表
public Map<Integer,List<Integer>> getAdjacencyListReverse(){
return adjacencyListReverse;
}
//添加有向图的边
public void addEdge(int vertex1, int vertex2){
List<Integer> vList = adjacencyList.get(vertex1);
vList.add(vertex2);
}
//添加反向图的边
public void addEdgeReverse(int vertex1, int vertex2){
List<Integer> vList = adjacencyListReverse.get(vertex1);
vList.add(vertex2);
}
}
第五周作业——有向图邻接表表示及反向图构造
最新推荐文章于 2021-05-03 00:52:00 发布