1. 程式人生 > >無向圖的實現

無向圖的實現

/**
 * 無向圖
 * @author yuli
 *
 */
public class UndirectedGraph {
    private  int vertex;//頂點
    private int edge;//邊
    private LinkedList<Integer>[] adj;//鄰接表
    /**
     * 內部建立
     * @param v 頂點
     */
    @SuppressWarnings("unchecked")
    public UndirectedGraph(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 UndirectedGraph(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); adj[m].add(v); //邊數+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]; } }