邻接表是一个list数组,数组中每个元素都是list,可扩展。
而临界矩阵是一个二维矩阵
public class DenseGraph {
private int n;
private int m;
private boolean directed;
private boolean[][] g;
public DenseGraph( int n , boolean directed ){
assert n >= 0;
this.n = n;
this.m = 0; // 初始化没有任何边
this.directed = directed;
g = new boolean[n][n];
}
public int V(){ return n;}
public int E(){ return m;}
public void addEdge( int v , int w ){
assert v >= 0 && v < n ;
assert w >= 0 && w < n ;
if( hasEdge( v , w ) )
return;
g[v][w] = true;
if( !directed )
g[w][v] = true;
m ++;
}
// 验证图中是否有从v到w的边
public boolean hasEdge( int v , int w ){
assert v >= 0 && v < n ;
assert w >= 0 && w < n ;
return g[v][w];
}
//返回图中一个顶点的所有邻边
public Iterable<Integer> adj(int v){
assert v >= 0 && v < n;
List<Integer> adjV = new ArrayList<Integer>();
for(int i = 0; i < n; i ++){
if(g[v][i]){
adjV.add(i);
}
}
return adjV;
}
}