Warshall 传递闭包算法

从第i个顶点开始,无论采取哪种遍历方法,都能得到通过第i个顶点访问到的所有顶点的信息,传递闭包第i行相应的列设为1;

#include<iostream>
using namespace std;

void warshall(int a[][4],int n)
{
	for (int k = 0; k < n; k++)
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				a[i][j]=a[i][j]||(a[i][k]&a[k][j]);
}

int main(void)
{
	const int MAX_LEN=1000;
	const int n=4;

	int a[n][n]={
			0,1,0,0,
			0,0,0,1,
			0,0,0,0,
                        1,0,1,0};

	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			cout.width(5);
			cout<<a[i][j];
		}
		cout<<endl;
	}
	warshall(a,n);
	cout<<"***********************"<<endl;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			cout.width(5);
			cout<<a[i][j];
		}
		cout<<endl;
	}
}
时间: 2024-11-09 02:43:15

Warshall 传递闭包算法的相关文章

有向图传递闭包

目录 传递闭包的定义 Floyd warshall 传递闭包算法 Floyd warshall 代码 算法实现原理 Floyd warshall 传递闭包算法的实现 时间复杂度 DFS 传递闭包算法 算法分析 代码实现 例题 有向图的传递闭包是Floyd warshall 算法的一种应用(主要参考算法导论) 传递闭包的定义 对于有向图G(V,E)的传递闭包即是G(V,E),其中E{(i,j):图G中包含一条由i到j的路径}. Floyd warshall 传递闭包算法 Floyd warshal

TOJ---1141---warShall传递闭包

好多事..... 特别是心事.... 总是爱追忆自己亲手丢掉的东西..... -------------------华丽丽的分界线--------------------- 好 现在来看这个题目吧: touch me 当时  题目是读懂了 就是纠结在 字符串的存储与读取上 然后就这样被卡主了... 后来 参考了下面2篇 博客  帮助很大 写的很好 http://blog.csdn.net/classicbear/article/details/7608410 http://www.cnblogs

flink Transitive Closure算法,实现寻找新的可达路径

1.Transitive Closure是翻译闭包传递?我觉得直译不准确,意译应该是传递特性直至特性关闭,也符合本例中传递路径,寻找路径可达,直到可达路径不存在(即关闭). 2.代码很简单,里面有些概念直指核心原理,详细看注释. /** * @Author: xu.dm * @Date: 2019/7/3 11:41 * @Version: 1.0 * @Description: 传递闭包算法,本例中就是根据成对路径,查找和生成新的可达路径 * 例如:1-2,2-4这两对数据,可以得出新的可达路

shortpath3660

poj3660_传递闭包 题意:有n头牛比赛,m种比赛结果,最后问你一共有多少头牛的排名被确定了,其中如果a战胜b,b战胜c,则也可以说a战胜c,即可以传递胜负.求能确定排名的牛的数目. 分析: 如果一头牛被x头牛打败,打败y头牛,且x+y=n-1,则我们容易知道这头牛的排名就被确定了,所以我们只要将任何两头牛的胜负关系确定了,在遍历所有牛判断一下是否满足x+y=n-1,将满足这个条件的牛数目加起来就是所求解. 抽象为简单的floyd传递闭包算法,在加上每个顶点的出度与入度 (出度+入度=顶点数

Warshall算法求传递闭包

传递闭包 在数学中,在集合 X 上的二元关系 R 的传递闭包是包含 R 的 X 上的最小的传递关系. 例如,如果 X 是(生或死)人的集合而 R 是关系“为父子”,则 R 的传递闭包是关系“x 是 y 的祖先”.再比如,如果 X 是空港的集合而关系 xRy 为“从空港 x 到空港 y 有直航”,则 R 的传递闭包是“可能经一次或多次航行从 x 飞到 y”. Warshall算法 Warshall在1962年提出了一个求关系的传递闭包的有效算法.其具体过程如下,设在n个元素的有限集上关系R的关系矩

求传递闭包的warshall算法

———————————————————————————— Question:R是定义于集合S上的二元关系,求R的传递闭包. Input:relation R,set A Output:t(R),which is the transitive closure of R  Solution:Warshall algorithm ———————————————————————————— 传递闭包(transitive closure) R* = R1 ∪ R2 ∪ R3 ∪ ...... ∪ Rn  

Warshall算法

---用Warshall算法解决传递闭包问题 ---在一个关系R中,如果任意的(a,b)和(b,c)在关系R中,则(a,c)也一定在关系R中,则称R是可传递的.一个关系R的传递闭包是包 含R的最小的传递关系. ---Warshall算法不用来计算最短路径,而是用来判断i和j之间是否单向连接,无论是直接连接还是间接连接 ---初始条件不再是邻接矩阵,而是关系矩阵,如果两个点之间直接单向连接,那么在矩阵中对应的值就为1,反之为0 ---根据已有的直接连接关系得出其它所有的间接连接关系,即判断两点之间

POJ3660 传递闭包———floyd算法

POJ3660 Cow Contest 题目链接:http://poj.org/problem?id=3660 题意:农名约翰有些奶牛,约翰通过让他们决斗来决定他们的排名,约翰让这些奶牛一对一打完一定的局数之后,问有哪些奶牛的排名是可以确定的(注:a打得过b,b打得过c,则a打得c) 根据题意我们明白当一个奶牛和其他的所有奶牛都存在胜负关系的时候,他的排名就是确定的. 思路:利用floyd算法,传递闭包,算出可达矩阵.然后在每一行去查询该点和其他所有的点的联系是不是n-1. 代码: //Auth

poj 3660 Cow Contest(warshall算法)

poj 3660 Cow Contest Description N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Each cow has a certain constant skill rating that is unique among the co