無向圖的實現
阿新 • • 發佈:2019-02-01
/**
* 無向圖
* @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];
}
}