离散数学实验 C ++关系的运算幂运算闭包运算演示教学文档格式.docx
- 文档编号:21153851
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:8
- 大小:41.29KB
离散数学实验 C ++关系的运算幂运算闭包运算演示教学文档格式.docx
《离散数学实验 C ++关系的运算幂运算闭包运算演示教学文档格式.docx》由会员分享,可在线阅读,更多相关《离散数学实验 C ++关系的运算幂运算闭包运算演示教学文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
>
Mat;
classRelation{
vector<
s;
//集合
MatA;
//关系矩阵
MatB;
MatC;
MatE;
MatD[100];
//用来存储矩阵
intn;
public:
voidinputs();
//将集合存入向量中
voidinputa();
//将读入的关系转化为关系矩阵
voidprint();
//输出关系矩阵
voidmi();
intWarshall();
};
//定义类
intn,m;
//全局变量,下文中使用
voidRelation:
:
inputs(){
cout<
<
"
输入集合"
;
for(inta;
cin>
>
a;
){
s.push_back(a);
if(getchar()=='
\n'
)
break;
}
}//将集合存入向量中
inputa(){//将读入的关系转化为关系矩阵
输入关系"
inti,j,e,r;
for(i=0;
i<
s.size();
i++){
vector<
u;
for(j=0;
j<
j++){
intia=0;
u.push_back(ia);
A.push_back(u);
B.push_back(u);
C.push_back(u);
E.push_back(u);
}//创建二维向量,初始化,是每个元素为0
for(inth,z;
h>
z;
if(h==0&
&
z==0)
break;
for(i=0;
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()=='
}
print(){
for(inti=0;
for(intj=0;
j++)
cout<
A[i][j]<
"
endl;
}//输出关系矩阵
mi(){
inta,b,i,c;
cin>
n;
//读入幂次
if(n==0){//0次幂
for(intk=0;
k<
++k){
for(intj=0;
++j){
if(k==j)
cout<
1"
//对角线上元素为1
else
0"
}
else{
for(i=1;
++i){
for(inth=0;
h<
++h){
for(intd=0;
d<
++d){
intm=0;
for(intx=0;
x<
++x){
m=m+B[h][x]*A[x][d];
//第h行第d列的元素对应相乘的和
}
C[h][d]=m;
}
if(i>
1){
for(a=0;
a<
++a){
for(b=0;
b<
++b){
if(C[a][b]!
=D[0][a][b])
break;
if(b!
=s.size())break;
}//检验是否重复
if(a==s.size()&
b==s.size()){
break;
//重复则跳出不再幂乘
for(intk=0;
k++){
for(intj=0;
B[k][j]=C[k][j];
D[i-1]=B;
c=i;
if(a==s.size()&
intq;
q=(n-i)%c;
//找出结果位置
if(q==0)q=c;
for(inte=0;
e<
e++){
for(intf=0;
f<
f++){
D[q-1][e][f]<
//输出
cout<
return;
}else{//1次幂
h++){
for(intn=0;
n<
n++){
B[h][n]<
intRelation:
Warshall(){
if(A[j][i]==1){
for(intk=0;
A[j][k]=A[j][k]+A[i][k];
if(A[j][k]!
=0&
A[j][k]!
=1)
A[j][k]=1;
print();
inta=1;
intb=1;
//
for(intp=0;
p<
++p){
for(intl=0;
l<
++l){
if(A[p][l]==0){
for(intx=0;
if(A[p][x]*A[x][l]==1)
a=0;
if(a==0){cout<
wrong!
for(intp=0;
for(intl=0;
if(A[p][l]==1&
E[p][l]==0){
A[p][l]=0;
//再判断传递性
for(intp=0;
for(intl=0;
if(A[p][l]==0){
for(intx=0;
if(A[p][x]*A[x][l]==1)
b=0;
}
}
}
if(b==1){
cout<
return0;
A[p][l]=1;
}cout<
right!
}//
return1;
voidmain(){
Relationw;
w.inputs();
w.inputa();
w.print();
输入n"
w.mi();
闭包为"
w.Warshall();
实验截图:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 离散数学实验 +关系的运算幂运算闭包运算演示教学 离散数学 实验 关系 运算 演示 教学