1.利用求传递闭包的Warshall算法,给定关系R,编写求R的可传递闭包的C语言程序并利用下列数据测试。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.利用求传递闭包的Warshall算法,给定关系R,编写求R的可传递闭包的C语言程序并利用下列数据测试。相关的知识,希望对你有一定的参考价值。

1.利用求传递闭包的Warshall算法,给定关系R,编写求R的可传递闭包的C语言程序并利用下列数据测试。
测试数据为:
1,0,0,0,
1,1,0,1,
0,1,1,0,
1,0,1,1

c++版
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

void main()

int n_dim=0;
cout<<"Input number of dimensions:";
cin>>n_dim;

char **array=new char*[n_dim]; //以下是动态创建一个 n_dim*n_dim 数组,如不太清楚的看我BLOG里的
char ch; //另一篇关于动态数组的文章

for(int i=0;i<n_dim;i++)

array[i]=new char[n_dim]; //这句也是
for(int j=0;j<n_dim;j++)

cin>>ch;
array[i][j]=ch;



for(i=0;i<n_dim;i++)
for(int j=0;j<n_dim;j++)
for(int k=0;k<n_dim;k++)
if(array[i][j]=='1'&&array[k][i]=='1')
array[k][j]='1';
cout<<"The trasitive closure of a relation R represented:"<<endl;
for(i=0;i<n_dim;i++)

for(int j=0;j<n_dim;j++)
cout<<array[i][j];
cout<<endl;




另一c++
#include <iostream>
#include <string>
using namespace std;
int **matrix;
void warshall(int n,int **m);
void setValue(int elem1,int elem2,int value);
void buildMatrix(int numElement);
int main()

int num;
string str;
cout << "Please input the number of elements:" << endl;
cin >> num;
buildMatrix(num);
cout << "Please input a set,such as R=(x1,x2),(x3,x4),...: " << endl;
cin >> str;
for(int i=0;i<str.size();i++)
if((str.at(i)=='(') && (str.at(i+2)==','))
setValue(str.at(i+1)-'0',str.at(i+3)-'0',1);

warshall(num,matrix);
return 0;


void warshall(int n,int **m)

int i,j,k;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(m[j][i] == 1)
for(k=0;k<n;k++)
m[j][k] = m[j][k] || m[i][k];
for(i=0;i<n;i++)

for(j=0;j<n;j++)
cout << " " << m[i][j] << " ";
cout << endl;



void setValue(int elem1,int elem2,int value)

if(value>0)
matrix[elem1-1][elem2-1] = value;


void buildMatrix(int numElement)

int i,j;
matrix = (int**) new int*[numElement];

for(i=0;i<numElement;i++)
matrix[i] = new int[numElement];
for(j=0;j<numElement;j++)
for(i=0;i<numElement;i++)
matrix[j][i] = 0;
参考技术A for(k=0;k<4;k++)
for(i=0;i<4;i++)
for(j=0;j<4;j++)
R[i][j]=R[i][j]||(R[i][k]&&R[k][j]);
参考技术B a 参考技术C 软件几班的,竟然到这来找答案来了

Warshall算法求传递闭包,Python语言~

输入一个关系的关系矩阵,计算其传递闭包,使用Warshall算法,
输出传递闭包所对应的关系矩阵,Python语言实现

高手不吝赐教~~

有满意的答案我会补分。

快纠结死我了,电脑盲,唉。

def __warshall(self, a):
assert (len(row) == len(a) for row in a)
n = len(a)
#请在下面编程实现Roy-Warshall求传递闭包的算法
#参数a:为一个关系矩阵
# 请删除pass后编程实现该方法功能
for i in range(n) :
for j in range(n):
if a[j][i] == 1:
for k in range(n):
a[j][k] = a[j][k] | a[i][k]
# 请在上面编写程序,不要修改下面代码
return a
参考技术A 完了我数学都快忘光了。不然还能帮帮,,

以上是关于1.利用求传递闭包的Warshall算法,给定关系R,编写求R的可传递闭包的C语言程序并利用下列数据测试。的主要内容,如果未能解决你的问题,请参考以下文章

Warshall算法求传递闭包

Warshall算法求传递闭包及Python编程的实现

Warshall算法求传递闭包

求传递闭包的warshall算法

warshall算法

二元关系的关系的闭包