关系性质
来源:互联网 发布:ios 无网络界面 编辑:程序博客网 时间:2024/04/29 09:22
实验内容:
已知关系R由关系矩阵M给出,要求判断由M表示的这个关系是否为自反关系、对称关系、传递关系。算法分析:
1. 若M(R的关系矩阵)的主对角线元素均为1,则R是自反关系;若M(R的关系矩阵)为对称矩阵,则R是对称关系;相关算法步骤:
① 输入关系矩阵M(M为n阶方阵);
②判断自反性,对于i=1,2,…,n;若存在mii=0,则R不是自反的;转⑤
③ 判断对称性,对于i=2,3,…,n;j=1,2,……,i-1,若存在mij≠mji,则R不是对称的;转⑤
④ R是自反的、对称的
⑤ 结束
2. 若关系R是可传递的,则必有:mik=1∧mkj=1 mij=1。这个式子也可改写成为: mij =0 mik =0∨mkj=0。我们可以根据后一个公式来完成判断可传递性这一功能的。
① 输入关系矩阵M(M为n阶方阵);
② 1i
③ 若i>n,转⑬
④ 1j
⑤ 若j>n,转⑫
⑥ 若mij=1,转⑪
⑦ 1k
⑧ 若k>n,转⑪
⑨ 若mik*mki=1,则R不是可传递的,转⑭
⑩ k+1k,转⑧
11 j+1j,转⑤
12 i+1i,转③
13 R是可传递的
14 结束
实现:
#include<iostream>
using namespace std;
const int SIZE=40;
int reflexiveRelation(int matrixRelations[SIZE][SIZE], int); //定义判断矩阵是否自反的函数
int symmetry(int matrixRelations[SIZE][SIZE], int); //定义判断矩阵是否对称的函数
int transmit(int matrixRelations[SIZE][SIZE], int); //定义判断矩阵是否传递的函数
int main()
{
int i,j,b = 0,a = 1;
int l, m, n;
int matrixRelation[SIZE][SIZE]; //定义关系矩阵
cout<<"请输入关系矩阵:"<<endl;
//输入关系矩阵
for(i = 0; ; i++,a++)
{
for (j = 0; ; j++)
{
cin>>matrixRelation[i][j];
b++;
if( getchar() == '\n')
{
break;
}
}
if (a == b)
{
break;
}
b = 0;
}
l = reflexiveRelation(matrixRelation,a); //自反
m = symmetry(matrixRelation,a); //对称
n = transmit(matrixRelation,a); //传递
if (l)
cout<<endl<<"这个关系是自反关系"<<endl;
else
cout<<endl<<"这个关系不是自反关系"<<endl;
if (m)
cout<<endl<<"这个关系是对称关系"<<endl;
else
cout<<endl<<"这个关系不是对称关系"<<endl;
if (n)
cout<<endl<<"这个关系是传递关系"<<endl<<endl;
else
cout<<endl<<"这个关系不是传递关系"<<endl<<endl;
return 0;
}
/**************************************************************
[函数名]:reflexiveRelation
[功能]:判断矩阵是否自反
[参数]:matrixRelation(关系矩阵),n(矩阵的阶数)
[实现]:判断矩阵的主对角线元素是否均为1,若是,则返回1,反之,返回0
[返回值]:1或0
**************************************************************/
int reflexiveRelation(int matrixRelations[SIZE][SIZE], int n)
{
int i;
for (i = 0; i < n; i++)
if (matrixRelations[i][i] != 1)
{
return 0;
}
return 1;
}
/**************************************************************
[函数名]:symmetry
[功能]:判断矩阵是否对称
[参数]:matrixRelation(关系矩阵),n(矩阵的阶数)
[实现]:判断任意matrixRelation[i][j]是否等于matrixRelation[j][i]
若均等于,则放回1,反之,返回0
[返回值]:1或0
**************************************************************/
int symmetry(int matrixRelations[SIZE][SIZE], int n)
{
int i,j;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
if (i != j)
{
if (matrixRelations[i][j] != matrixRelations[j][i])
{
return 0;
}
}
}
return 1;
}
/**************************************************************
[函数名]:transmit
[功能]:判断矩阵是否传递
[参数]:matrixRelation(关系矩阵),n(矩阵的阶数)
[实现]:若对于任意第i行k列元素与第k行j列都为1,满足第i行j列元素为1
则返回1,反之,返回0 (十字型法)
[返回值]:1或0
**************************************************************/
int transmit(int matrixRelations[SIZE][SIZE], int n)
{
int i = 0, k = 0, j = 0;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
for (k = 0; k < n; k++)
if ((matrixRelations[i][k] == 1) && (matrixRelations[k][j] == 1))
{
if (matrixRelations[i][j] == 0)
{
return 0;
}
}
return 1;
}
- 关系性质
- 关系数据库的代数性质(一)
- 【离散数学实验】关系R的性质判断
- 离散数学 关系性质的判断及其闭包运算
- 数论--简述同余关系及其部分性质
- 正交矩阵和旋转矩阵之间关系和性质总结
- 离散数学实践:关系的性质判断&关系的幂&关系的传递闭包
- 技巧 改变实体性质(增加一个类型字段) , 增加一种关系 考虑上游下游的影响
- Newton差分插值性质证明(均差与差分的关系证明)
- 样本统计量与总体的关系,抽样分布的概念性质
- 从作用机制和性质上看待methods,watch和computed的关系
- CRB and Candies(数论综合题:求有关自然数与组合数的最小公倍数性质关系+快速幂求逆元)
- 博客性质
- 三角形性质
- MST性质
- 整数性质
- 计算性质
- hdu2685gcd性质
- [倚天屠龙记] vim 查找与替换(简单替换)
- 第十四周项目1(4)-小玩文件
- VTK轮廓提取
- ios app应用中在AppDelegate设置全局变量
- 电脑网络设置
- 关系性质
- 2015.05
- hive udaf 用maven打包执行create temporary function 时报错
- XSS的一些总结(原理+检测+防御)
- Openstack 使用
- UIGestureRecognizerDelegate两三事 & UIScrollView滑动 子View上UIPanGestureRecognizer手势冲突
- Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom
- 一个函数能否被两个线程同时调用
- HDU ACM 1024 Max Sum Plus Plus ->最大连续子序列和的增强版