离散数学实验-C-++关系的运算(幂运算-闭包运算)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验2 关系的运算
(1)关系的幂运算
输入:集合A,二元关系集合R,幂次n
输出:R的n次幂
要求:尽量使运算的计算量最小
(2)关系闭包的计算
输入:集合A,二元关系集合R
输出:R的传递闭包t(R)
要求:
(a)采用Warshall 算法(89页)
(b)编写代码判断输出t(R)为传递闭包程序代码:
#include
#include
#include
using namespace std;
typedef vector< vector
class Relation{
vector
Mat A;//关系矩阵
Mat B;
Mat C;
Mat E;
Mat D[100]; //用来存储矩阵
int n;
public:
void inputs();//将集合存入向量中
void inputa();//将读入的关系转化为关系矩阵
void print();//输出关系矩阵
void mi();
int Warshall();
};//定义类
int n,m;//全局变量,下文中使用
void Relation::inputs(){
cout<<"输入集合";
for(int a;cin>>a;){
s.push_back(a);
if(getchar()=='\n')
break;}
}//将集合存入向量中
void Relation::inputa(){//将读入的关系转化为关系矩阵
cout<<"输入关系";
int i,j,e,r;
for(i=0;i vector for(j=0;j int ia=0; u.push_back(ia);} A.push_back(u); B.push_back(u); C.push_back(u); E.push_back(u); }//创建二维向量,初始化,是每个元素为0 for(int h,z;cin>>h>>z;){ if(h==0&&z==0) break; for(i=0;i if(s[i]==h) e=i; if(s[i]==z) r=i; } A[e][r]=1;B[e][r]=1; E[e][r]=1;//C[e][r]=1;//读入关系,将关系对应的矩阵 中的位置元素变为1 if(getchar()=='\n') break; } } void Relation::print(){