这是求有向图里所有点最短距离的部分代码(利用传递闭包的算法)。能不能帮我注解一下每句的意思?最好有个完整的例子让我对比一下。谢谢了。
public class GraphA{

private boolean[][] edges;
private Object[] vertices;

public Graph(int n){
edges = new boolean[n][n];
vertices = new Object[n];

public void addEdge(int src, int destn){
edges[src][destn] = true;
}

public boolean adjacent(int src, int destn){
return (edges[src][destn]);
}
private boolean[][] boolprod(int size, boolean[][] first, boolean[][] second){
boolean tmp = false;
boolean res[][] = new boolean [size][size];
for(int i = 0; i<size; i++){ // 列
for(int j = 0; j<size; j++){ // 行
tmp = false;
for(int k = 0; k<size; k++){
tem = tmp || (first[i,k] && second[k,j]);
}
res[i,j] = tmp;
}
}
return res;
} public boolean[][] transclose(int n, boolean[][]adj){
boolean [][] newmat = new boolean [n][n];
boolean [][] adjmat = adj;
boolean [][] path = adj;
for(int i = 1; i<n; i++){ //path = adj
newmat = boolprod(n, adjmat, adj);
for(int j = 0; j<n; j++){
for(int k = 0; k<n; k++){
path[j,k] = path[j,k] || newmat[j,k];
}
adjmat = newmat;
}
}
return path;
}

解决方案 »

  1.   

    public class GraphA{private boolean[][] edges;
    private Object[] vertices;public GraphA(int n){
    edges = new boolean[n][n];
    vertices = new Object[n];
    }
    public void addEdge(int src, int destn){
    edges[src][destn] = true;
    }public boolean adjacent(int src, int destn){
    return (edges[src][destn]);
    }
    private boolean[][] boolprod(int size, boolean[][] first, boolean[][] second){
    boolean tmp = false;
    boolean res[][] = new boolean [size][size];
    for(int i = 0; i<size; i++){ // 列
    for(int j = 0; j<size; j++){ // 行
    tmp = false;
    for(int k = 0; k<size; k++){
    tmp = tmp || (first[i][k] && second[k][j]);
    }
    res[i][j] = tmp;
    }
    }
    return res;
    }public boolean[][] transclose(int n, boolean[][]adj){
    boolean [][] newmat = new boolean [n][n];
    boolean [][] adjmat = adj;
    boolean [][] path = adj;
    for(int i = 1; i<n; i++){ //path = adj
    newmat = boolprod(n, adjmat, adj);
    for(int j = 0; j<n; j++){
    for(int k = 0; k<n; k++){
    path[j][k] = path[j][k] || newmat[j][k];
    }
    adjmat = newmat;
    }
    }
    return path;
    }
    }
    先把错的地方改过来