有向图的实现

来源:互联网 发布:网络电视有哪些功能 编辑:程序博客网 时间:2024/05/01 17:20
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;    }}
原创粉丝点击