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

2025-03-22 16:20:05
推荐回答(4个)
回答1:

c++版
#include
#include
#include

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 {
array[i]=new char[n_dim]; //这句也是
for(int j=0;j {
cin>>ch;
array[i][j]=ch;
}
}

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

}

另一c++
#include
#include
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 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 for(j=0;j if(m[j][i] == 1)
for(k=0;k m[j][k] = m[j][k] || m[i][k];
for(i=0;i {
for(j=0;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 matrix[i] = new int[numElement];
for(j=0;j for(i=0;i matrix[j][i] = 0;
}

回答2:

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]);

回答3:

a

回答4:

软件几班的,竟然到这来找答案来了