关系的3种基本运算

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int Transpose(MAT&A,int n)
{//求矩阵的逆,因为关系R的逆的关系矩阵是R的关系矩阵的转置矩阵,因此将该矩阵转置即得该关系的逆,转置完后返回
int temp;
for(int i=0;i<n;i++)
for(int j=0;j<i;j++)
{//
temp=A[i][j];
A[i][j]=A[j][i];
c[i][j]=1;
return 1;
}
void Warshall(MAT&A,int n)
{//warshall算法,求矩阵A的关系闭包矩阵,
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(A[j][i]==1)
{
for(int k=0;k<n;k++)
A[j][k]=bool(A[j][k]+A[i][k]);
case'b':
case'B':Warshall(B,size);cout<<"这是B的关系闭包:"<<endl;Switch(B,a);break;
default:cout<<"you have type a wrong char"<<endl;
}
return 1;
}
运行结果:
1、
2、
3、
A[j][i]=temp;
}
return 1;
}
int Compose(MAT a,MAT b,MAT&c,int n)
{//合成运算,将矩阵a和b进行合成,即当矩阵a与b个
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
for(int k=0;k<n;k++)
if(a[i][k]*b[k][j]==1)
cin>>size;//由于关系矩阵的行和列的个数相同,并且若参加运算的各关系所原有元素集合都一样。
M a(size);//初始化集合。
vector<int>c(size,0);
cout<<"请输入集合元素:"<<eቤተ መጻሕፍቲ ባይዱdl;
for( i=0;i<size;i++)
{//输入所有关系所包含的元素的集合、
}
for(i=0;i<size;i++)//对二维矩阵进行赋值的
{for( j=0;j<size;j++)
{
for(k=0;k<n*2;k+=2)
{
if(e[k]==a[i]&&e[k+1]==a[j])
A[i][j]=1;
}
}
}
return 1;
}
int main()
{
int size,i;
cout<<"请输入size"<<endl;
cout<<"这是A,B合成后的序偶:"<<endl;
Switch(C,a);
cout<<"which one you want it to do warshall:a or b"<<endl;
char m;cin>>m;
switch(m)
{
case'A':
case'a':Warshall(B,size);cout<<"这是A转置后的关系闭包:"<<endl;Switch(A,a);break;
}
}
}
int Output(MAT&a,int n)
{//输出关系矩阵
for(int i=0;i<n;i++)
{for(int j=0;j<n;j++)
cout<<a[i][j]<<"";
cout<<endl;
}
return 1;
}
void Switch(MAT A,M a)
{//用于将矩阵转化为关系并输出该关系的集合。其中M中存放的是关系矩阵a存放的是该矩阵中的元素的集合,
cin>>a[i];
}
MAT A(size,c),B(size,c),C(size,c);//用一维向量对二维向量进行初始化
cout<<"请输入集合A的序偶个数:"<<endl;
Input(A,size,a);
cout<<"请输入集合B的序偶个数:"<<endl;
Input(B,size,a);
Compose(A,B,C,size);
代码段:
#include<iostream>
#include<vector>
using namespace std;
typedef vector<char> M;//存储集合
typedef vector<vector<int> > MAT;//存储矩阵
int Output(MAT&,int);//用于输出矩阵
{//从键盘读入关系R并将其转化为矩阵,返回该关系下的矩阵。
int i=0,j=0,k=0,n;
cin>>n;//序偶个数
M e(2*n,0);
cout<<"请输入关系R的n个序偶<x,y>:"<<endl;
for(i=0;i<2*n;i+=2)//输入n个序偶
{
cin>>e[i]>>e[i+1];
cout<<"这是所输的A的关系矩阵:"<<endl;
Output(A,size);
Transpose(A,size);
cout<<"这是A转置后的序偶:"<<endl;
Switch(A,a);
Output(A,size);
cout<<"这是所输的B的关系矩阵:"<<endl;
Output(B,size);
for(int i=0;i<a.size();i++)
for(int j=0;j<a.size();j++)
{
if(A[i][j]==1)
{
cout<<"<"<<a[i]<<","<<a[j]<<">"<<",";
}
}
cout<<endl;
}
int Input(MAT&A,int &size,M a)
相关文档
最新文档