检查矩阵在java中是否有根节点

检查矩阵在java中是否有根节点,java,matrix,root,Java,Matrix,Root,所以我需要检查矩阵是否有根节点,或者它是否是一棵树。 我这样做的方式是检查是否有一个节点的indegree为0,而所有其他节点都需要为1。我已经这样做了,但是我的代码没有检查是否有任何循环。我不知道如何检查是否有循环,因为如果有,这意味着矩阵不是树 所以,如果你画一个矩阵图,你会得到这样的结果 矩阵im测试是: 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0

所以我需要检查矩阵是否有根节点,或者它是否是一棵树。 我这样做的方式是检查是否有一个节点的indegree为0,而所有其他节点都需要为1。我已经这样做了,但是我的代码没有检查是否有任何循环。我不知道如何检查是否有循环,因为如果有,这意味着矩阵不是树

所以,如果你画一个矩阵图,你会得到这样的结果

矩阵im测试是:

0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
0 0 1 0 0 1 0 0 0
0 1 0 0 0 0 1 0 1
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
下面是我在一个名为matrixWork的单独文件中运行它的代码

public int rootnode(){
// Root node number (if any) of current matrix
for(int i = 0; i < SIZE-1; i++){
    if(indegree(i) == 0){
        for(int j = i; j < SIZE-1; j++){
            if(indegree(i) == 0 && indegree(j) !=0){
                return i;   
            }
        }
    }
    else if(indegree(i) > 1)
        return -1;
}
//in case they are all 1s
return -1;
}

public int indegree(int K){
// Number of arrows INTO node K of digraph
// Nodes are numbered 0,1,2,...,SIZE-1
int colsum = 0;
for(int r = 0; r < SIZE; r++)
  colsum = colsum + M[r][K];
return colsum;
}
public int rootnode(){
//当前矩阵的根节点号(如果有)
对于(int i=0;i1),则为else
返回-1;
}
//以防它们都是1
返回-1;
}
公共int索引(int K){
//指向有向图节点K的箭头数
//节点编号为0,1,2,…,大小为1
int colsum=0;
对于(int r=0;r
这是主课

public class MatrixWork{
    // Instance variables
    public int M[][];
    public int SIZE;

    // Boolean matrix constructors

    public MatrixWork(int s){
      SIZE = s;
      M = new int[SIZE][SIZE];
      // Fill M with zeros
      for(int r = 0; r < SIZE; r++){
        for(int c = 0; c < SIZE; c++){
          M[r][c] = 0;
        }
      }
} 

  public MatrixWork(int[][] B){
      SIZE = B.length;
      M = new int[SIZE][SIZE];
      // Copy matrix B values into M
      for(int r = 0; r < SIZE; r++){
        for(int c = 0; c < SIZE; c++){
          if(B[r][c] == 0)
            M[r][c] = 0;
          else
            M[r][c] = 1;
        }
      }
  } 

    public static void main(String[] args)
    {
        int A[][] = new int[][]
        {{0, 0, 0, 1, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {1, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 1, 0, 0, 1, 0, 0, 0},
        {0, 1, 0, 0, 0, 0, 1, 0, 1},
        {0, 0, 0, 0, 0, 0, 0, 1, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0},
        {0, 0, 0, 0, 0, 0, 0, 0, 0}};

        MatrixWork MA = new MatrixWork(A);
    }
}
公共类矩阵工作{
//实例变量
公共int M[][];
公共整数大小;
//布尔矩阵构造函数
公共矩阵工作(int s){
尺寸=s;
M=新整型[尺寸][尺寸];
//用零填充M
对于(int r=0;r
对于那些在未来寻找此类问题答案的人。我能够得到矩阵本身的传递闭包。如果对角线上的任何数字是1,这意味着有一个循环,因此这不是一棵树。
希望这对其他人有所帮助。

您是在询问数学算法还是如何实现算法?什么是“矩阵是树”?我有一些想法,但我想你需要写更多。我需要知道如何实现它。我很抱歉,纳普拉蒂。。。我是说树上的矩阵。。我会去添加更多细节矩阵是矩阵,树是树。您可以将树存储在矩阵中,但您需要定义如何表示它。您的矩阵树是吗?