离散数学实验 C ++关系的运算(幂运算,闭包运算)
关系的幂运算输入:集合A,二元关系集合R,幂次n输出:R的n次幂关系闭包的计算输入:集合A,二元关系集合R输出:R的传递闭包t(R)采用Warshall 算法(89页)编写代码判断输出t(R)为传递闭包
实验2 关系的运算
(1) 关系的幂运算
输入:集合A,二元关系集合R,幂次n 输出:R的n次幂
要求:尽量使运算的计算量最小
(2) 关系闭包的计算
输入:集合A,二元关系集合R
输出:R的传递闭包t(R)
要求:
(a) 采用Warshall 算法(89页)
(b) 编写代码判断输出t(R)为传递闭包 程序代码:
#include<iostream>
#include<sstream>
#include<vector>
using namespace std;
typedef vector< vector <int> > Mat;
class Relation{
vector<int>s;//集合
Mat A;//关系矩阵
Mat B;
Mat C;
关系的幂运算输入:集合A,二元关系集合R,幂次n输出:R的n次幂关系闭包的计算输入:集合A,二元关系集合R输出:R的传递闭包t(R)采用Warshall 算法(89页)编写代码判断输出t(R)为传递闭包
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(){//将读入的关系转化为关系矩阵
关系的幂运算输入:集合A,二元关系集合R,幂次n输出:R的n次幂关系闭包的计算输入:集合A,二元关系集合R输出:R的传递闭包t(R)采用Warshall 算法(89页)编写代码判断输出t(R)为传递闭包
cout<<"输入关系";
int i,j,e,r;
for(i=0;i<s.size();i++){
vector<int> u;
for(j=0;j<s.size();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)
A[e][r]=1;B[e][r]=1; E[e][r]=1;//C[e][r]=1;//读入关系,将关系对应的矩阵中的位 break; for(i=0;i<s.size();i++){ } if(s[i]==h) e=i; if(s[i]==z) r=i;
关系的幂运算输入:集合A,二元关系集合R,幂次n输出:R的n次幂关系闭包的计算输入:集合A,二元关系集合R输出:R的传递闭包t(R)采用Warshall 算法(89页)编写代码判断输出t(R)为传递闭包
置元素变为1
if(getchar()=='\n')
break;
}
}
void Relation::print(){
for(int i=0;i<s.size();i++){
for(int j=0;j<s.size();j++) cout<<A[i][j]<<" ";
cout<<endl;
}
}//输出关系矩阵
void Relation::mi(){
int a,b,i,c;
cin>>n; //读入幂次 if(n==0){ //0次幂
for(int k=0;k<s.size();++k){ for(int j=0;j<s.size();++j){ if(k==j) cout<<"1 "; //对角线上元素为1
关系的幂运算输入:集合A,二元关系集合R,幂次n输出:R的n次幂关系闭包的计算输入:集合A,二元关系集合R输出:R的传递闭包t(R)采用Warshall 算法(89页)编写代码判断输出t(R)为传递闭包
else
cout<<"0 ";
}
cout<<endl;
}
}
else{
for(i=1;i<n;++i){
for(int h=0;h<s.size();++h){ for(int d=0;d<s.size();++d){ int m=0;
for(int x=0;x<s.size();++x){ m=m+B[h][x]*A[x][d]; 行第d列的元素对应相乘的和 }
C[h][d]=m;
}
}
if(i>1){
for(a=0;a<s.size();++a){
for(b=0;b<s.size();++b){ if(C[a][b]!=D[0][a][b]) //第h
关系的幂运算输入:集合A,二元关系集合R,幂次n输出:R的n次幂关系闭包的计算输入:集合A,二元关系集合R输出:R的传递闭包t(R)采用Warshall 算法(89页)编写代码判断输出t(R)为传递闭包
} } } break; if(b!=s.size())break; }//检验是否重复 if(a==s.size()&&b==s.size()){ } for(int k=0;k<s.size();k++){ } for(int j=0;j<s.size();j++){ } D[i-1]=B; c=i; B[k][j]=C[k][j]; break;//重复则跳出不再幂乘 if(a==s.size()&&b==s.size()){ int q; q=(n-i)%c; //找出结果位置 if(q==0) q=c; for(int e=0;e<s.size();e++){ for(int f=0;f<s.size();f++){
关系的幂运算输入:集合A,二元关系集合R,幂次n输出:R的n次幂关系闭包的计算输入:集合A,二元关系集合R输出:R的传递闭包t(R)采用Warshall 算法(89页)编写代码判断输出t(R)为传递闭包
}
}
} } cout<<D[q-1][e][f]<<" "; //输出 cout<<endl; return; }else{//1次幂 } for(int h=0;h<s.size();h++){ } for(int n=0;n<s.size();n++){ } cout<<endl; cout<<B[h][n]<<" ";
int Relation::Warshall(){ for(int i=0;i<s.size();++i){
for(int j=0;j<s.size();++j){ if(A[j][i]==1){ for(int k=0;k<s.size();++k){
关系的幂运算输入:集合A,二元关系集合R,幂次n输出:R的n次幂关系闭包的计算输入:集合A,二元关系集合R输出:R的传递闭包t(R)采用Warshall 算法(89页)编写代码判断输出t(R)为传递闭包
} } } } if(A[j][k]!=0&&A[j][k]!=1) A[j][k]=1;
print();
int a=1;int b=1;//
for(int p=0;p<s.size();++p){
}
if(a==0){cout<<"wrong!"<<endl;} else{ for(int l=0;l<s.size();++l){ } if (A[p][l]==0){ } for (int x=0;x<s.size();++x){ } if(A[p][x]*A[x][l]==1) a=0;
关系的幂运算输入:集合A,二元关系集合R,幂次n输出:R的n次幂关系闭包的计算输入:集合A,二元关系集合R输出:R的传递闭包t(R)采用Warshall 算法(89页)编写代码判断输出t(R)为传递闭包
for(int l=0;l<s.size();++l){ } if(A[p][l]==1&&E[p][l]==0){ A[p][l]=0; //再判断传递性 } for(int p=0;p<s.size();++p){ } if(b==1){ } A[p][l]=1; cout<<"wrong!"<<endl; return 0; for(int l=0;l<s.size();++l){ } if (A[p][ …… 此处隐藏:2172字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [政务民生]2013年公共基础知识热点问题(七)
- [政务民生]检验检测机构资质认定评审准则及释义20
- [政务民生]关于印发重庆市房屋建筑和市政基础设施
- [政务民生]1、隧道洞身开挖支护施工技术交底书
- [政务民生]2015年山东省17地市中考语文试题分类汇
- [政务民生]2-高级会计师资格考试和评审流程图
- [政务民生]2018版中国清分机行业发展分析及前景策
- [政务民生]新课改高中政治探究
- [政务民生]2018-2024年中国新型组合房屋行业投资
- [政务民生]2015年上海市春季高考数学模拟试卷五
- [政务民生]灌砂法及环刀法测压实度(带计算过程)
- [政务民生]运筹学实验2求解非线性规划
- [政务民生]劝学、逍遥游默写(教师卷)
- [政务民生]《运筹学》 - 期末考试 - 试卷A - 答案
- [政务民生]八年级英语下册 Module 6 Hobbies测试
- [政务民生]2019年宪法知识竞赛试题库100题(含答
- [政务民生]自动化英文文献翻译
- [政务民生]公文格式实施细则
- [政务民生]高一地理上册课堂跟踪练习题6
- [政务民生]会计继续教育习题及答案
- 第三章 无约束最优化方法
- 泛读教程第三册答案
- 魏晋南北朝文学
- 幂的运算复习题
- 城市环境问题的成因与治理策略_以社会
- 钢结构行业产业链及竞争分析研究
- 新型热塑性弹性体增韧聚丙烯的研究
- 中国旅游地理B卷试题及答案
- (苏教版)五年级数学上册第三单元测试卷
- 不稳定性心绞痛诊断与治疗
- 俞氏国际后勤职能部门绩效考核办法
- GB7258-2017新标准考试题含答案
- 小学生汉字听写比赛活动方案
- 1.3《平抛运动》学案 教科版必修2
- 2011香港特别行政区公务员考试复习资料
- 考虑水力条件变化的城市给水管网可靠性
- 表面活性剂在油田开发和生产中的应用
- ITT内部培训资料-FI端吸泵的介绍
- 文明守纪,从我做起学生发言稿
- 初中读《聊斋志异》心得体会800字范文




