这是求有向图里所有点最短距离的部分代码(利用传递闭包的算法)。能不能帮我注解一下每句的意思?最好有个完整的例子让我对比一下。谢谢了。
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;
}
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;
}
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;
}
}
先把错的地方改过来