检查矩阵在java中是否有根节点
所以我需要检查矩阵是否有根节点,或者它是否是一棵树。 我这样做的方式是检查是否有一个节点的indegree为0,而所有其他节点都需要为1。我已经这样做了,但是我的代码没有检查是否有任何循环。我不知道如何检查是否有循环,因为如果有,这意味着矩阵不是树 所以,如果你画一个矩阵图,你会得到这样的结果 矩阵im测试是:检查矩阵在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
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,这意味着有一个循环,因此这不是一棵树。
希望这对其他人有所帮助。您是在询问数学算法还是如何实现算法?什么是“矩阵是树”?我有一些想法,但我想你需要写更多。我需要知道如何实现它。我很抱歉,纳普拉蒂。。。我是说树上的矩阵。。我会去添加更多细节矩阵是矩阵,树是树。您可以将树存储在矩阵中,但您需要定义如何表示它。您的矩阵树是吗?