图的传递闭包是指修正后的邻接矩阵表示的图。(见Graph 图-邻接矩阵法
)
在多个顶点的有向图中,每个顶点可以到按照方向到达一定的节点,这叫图的连通性。有种方法直接告诉我们,图中的两个节点是否可以联通,这里说的是WarShall算法。
WarShall的基本原理是,如果A可以到达B,且C可以到达A,则C可以到达B。通过对邻接矩阵的修正可以做到这点。随然这里举例是将两步可并成一步,但数学上可以证明这种修正可以达到任意步骤。
下面是代码:
class WarShall {
private boolean[][] adjMat;
WarShall(int size) {
adjMat = new boolean[size][size];
}
void connect(int from, int to) {
adjMat[from][to] = true;
}
boolean isConnect(int from, int to) {
return adjMat[from][to];
}
void warshall() { //warshall算法
for(int y=0; y<adjMat.length; y++) //查找每一行
for(int x=0; x<adjMat.length; x++) // 查找每个单元格
if(adjMat[y][x]) //如果 y 可以到达 x
for(int z=0; z<adjMat.length; z++) //查找所有行的y列
//如果 z 可以到达y ,说明z 可以直接到达x
if(adjMat[z][y]) adjMat[z][x] = true;
}
boolean[][] getConnections() {
return adjMat;
}
public static void main(String[] args) {
WarShall w = new WarShall(5);
w.connect(0,2);
w.connect(1,0);
w.connect(1,4);
w.connect(3,4);
w.connect(4,2);
for(boolean[] a: w.getConnections()) {
for(boolean b: a) System.out.print(b + " ");
System.out.println();
}
w.warshall();
System.out.println("==================");
for(boolean[] a: w.getConnections()) {
for(boolean b: a) System.out.print(b + " ");
System.out.println();
}
assert w.isConnect(3,2);
}
}
分享到:
相关推荐
图论- 图的连通性- 传递闭包.rar
主要研究了负传递的性质,利用余蕴涵的概念,给出了有限论域上模糊关系的极小S-负传递闭包的一个求解方法,进一步丰富了模糊关系传递性的对偶性质——负传递性的研究。
离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包,传递闭包 离散数学-关系,集合,求自反闭包,对称闭包...
Warshall传递闭包算法,使用C++实现Warshall传递闭包算法,对正在学习算法的同学应该挺有帮助的
离散数学中传递闭包是用Warshall算法求的,此程序正式这种算法的C语言实现
做模糊聚类分析时判断模糊矩阵传递性并计算传递闭包MATLAB实现,,可以算出模糊传递矩阵,当矩阵满足自反性对称性时为等价矩阵
传递闭包C++描述,应用c++语言描述传递闭包算法
模糊聚类分析传递闭包算法FCM的matlab程序,能对数据进行分类处理,经调试验证无误。
matlab的在做模糊聚类分析时的传递闭包算法,可以算出模糊等价矩阵
即在数学中,在集合 X 上的二元关系 R 的传递闭包是包含 R 的 X 上的最小的传递关系。 例如,如果 X 是(生或死)人的集合而 R 是关系“为父于”,则 R 的传递闭包是关系“x 是 y 的祖先”。再比如,如果 X 是空港的...
学会用C语音编写自反闭包,对称闭包,传递闭包,加深对关系运算的理解。
用C语言实现传递闭包的warshall算法
离散实验报告求有限集上给定关系的自反、对称和传递闭包
我自己写的求传递闭包的程序。多批评。用类封装过了。应该比较好用。
实验名称:Warshall算法计算关系的传递闭包 源代码: #include using namespace std; int add(int a,int b) {if(a==0&&b==0) return 0; else if(a==0&&b==1||a==1&&b==0||a==1&&b==1) return 1; else cout...
关系的传递闭包 c++语言描述 绝对可以实现的 下载吧
C++编写warshall算法的传递闭包
实验目的:熟悉warshall算法,掌握求关系的自反闭包,对称闭包和传递闭包的方法。 实验内容:从键盘输入一个关系的关系矩阵,自动求出自反闭包、对称闭包和传递闭包。 计算传递闭包用Warshall算法。 #include...
用于在聚类分析中求传递闭包,输入是一个方阵,我做的是一个聚类分析在学生成绩评价的应用。希望对大家有所帮助