栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

等价关系的判定 C++实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

等价关系的判定 C++实现

一、自反性判断

//自反性判断
bool isZifan(int *M[],int n) {   //检查对角线元素是否为1
	for(int i=0;i 

二、对称性判断

//对称性判断
bool isDuichen(int *M[],int n) {  //检查是否关于对角线对称
	for(int i=0;i 

三、传递性判断

方法1:Floyd-Warshall算法(矩阵乘法)

思路:设M是R的关系矩阵,若M*M为M的子集,则R具有传递性。

判断方法:计算M*M,M*M为M的子集的意思是,在方阵对应的同行同列的位置,若对于M,该数为0,则对于M*M,该数必为零,否则R不具有传递性。即:若M中的a[i][j] == 0, 则必有M*M中的c[i][j] == 0 。

bool isChuandi(int *M[],int n) {
	int **tmp=NULL;
	tmp=new int* [n];
	for(int i=0;i 

方法2:基于图论的dfs寻路(中途点判别法)

思路:利用矩阵表示方法,遍历这个矩阵如果遇到一个等于1的位置,记录位置,利用其纵坐标作为下一个数的横坐标,在此横坐标下找到是1的位置,记录这个位置,在利用上一个数位置的横坐标和这个数的纵坐标找到一个新的位置,如果这个位置上是1,那么这个数就具有可传递性,然后继续遍历进行这个循环操作,知道检查到所有的数都对上了,这个二元关系才可说具有可传递性,有一个不符的则不是具有传递性的二元关系。

bool isChuandi(int *M[],int n) {
	bool flag=1;     //假定具有传递性
	for(int i=0;i 

四、主函数

int main() {
	int **M=NULL;
	int n;
	cout<<"请输入二元关系对应方阵(n*n)的行数:"<>n;
	M=new int* [n];
	for(int i=0;i>M[i][j];
		}
	}
	if(isZifan(M,n) && isDuichen(M,n) && isChuandi(M,n)) { //判断是否为等价关系
		cout<<"该二元关系是等价关系!"< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935002.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号