.
实验2 关系的运算 (1) 关系的幂运算
输入:集合A,二元关系集合R,幂次n 输出:R的n次幂
要求:尽量使运算的计算量最小 (2) 关系闭包的计算 输入:集合A,二元关系集合R 输出:R的传递闭包t(R) 要求:
(a) 采用Warshall 算法(89页) (b) 编写代码判断输出t(R)为传递闭包 程序代码:
#include
typedef vector< vector
精选文档
.
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 }//创建二维向量,初始化,是每个元素为0 for(int h,z;cin>>h>>z;){ if(h==0&&z==0) break; for(i=0;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(){ for(int i=0;i }//输出关系矩阵 void Relation::mi(){ int a,b,i,c; cin>>n; //读入幂次 if(n==0){ //0次幂 for(int k=0;k cout<<\对角线上元素为1 精选文档 . else cout<<\ } cout< for(i=1;i for(int h=0;h for(int x=0;x C[h][d]=m; } } if(i>1){ for(a=0;a 第h