有向图的实现

xiaoxiao2021-02-28  161

public class DirectedGraph { private int vertex;//顶点 private int edge;//边 private LinkedList<Integer>[] adj;//邻接表 /** * 内部创建 * @param v 顶点 */ @SuppressWarnings("unchecked") public DirectedGraph(int v){ this.vertex = v; edge = 0; adj = new LinkedList[v]; for(int i=0;i<v;i++){ adj[i] = new LinkedList<>(); } } /** * 通过加载文件创建 * @param file * @throws IOException */ @SuppressWarnings("unchecked") public DirectedGraph(File file) throws IOException{ FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); int vertex = Integer.parseInt(br.readLine());//读取顶点数 this.vertex = vertex;//读取顶点数 //创建有顶点数的邻接表 adj = new LinkedList[vertex]; for(int i=0;i<vertex;i++){ adj[i] = new LinkedList<>(); } int edge = Integer.parseInt(br.readLine());//读取边 for(int i=0;i<edge;i++){ //获取顶点对 String[] vertexs = br.readLine().split(" "); int v = Integer.parseInt(vertexs[0]); int m = Integer.parseInt(vertexs[1]); //将顶点对添加成一条边 addEdge(v, m); } if(br!= null){ br.close(); } } /** * 添加 一条双向边 * @param v * @param m */ public void addEdge(int v,int m){ adj[v].add(m); //边数+1 edge++; } /** * 获取顶点数 * @return */ public int vertexNum(){ return vertex; } /** * 边数 * @return */ public int edgeNum(){ return edge; } /** * 返回临界链表迭代器 * @param v * @return */ public Iterable<Integer> adj(int v){ return adj[v]; } /** * 有向图取反 * @return */ public DirectedGraph reverser(){ DirectedGraph directedGraph = new DirectedGraph(vertex); for(int v = 0;v<vertex;v++){ for(int w:adj(v)){ directedGraph.addEdge(w, v); } } return directedGraph; } }
转载请注明原文地址: https://www.6miu.com/read-18414.html

最新回复(0)