最近学离散数学学到怎么判断二元关系的可传递性..于是就兴冲冲的写下了下面这段程序.
感觉构建数组和判断可传递性都写在一起太混乱了,但是又不知道怎么把动态二维数组作为形参传递,所以就全写在一起了
#include<iostream>
using namespace std;
//创建和判断方法
bool Func(int a)
{
size_t cow,rol;//定义输入的行和列
bool flag=1;//判断的哨兵
bool *c=new bool[a];
int count=0;
bool **p;
p=new bool*[a];
p[0]=new bool[a*a];
for(size_t ix=1; ix!=a; ++ix)
p[ix]=p[ix-1]+a;
for(ix=0; ix!=a; ++ix)
for(size_t jy=0; jy!=a; ++jy)//初始化数组
p[ix][jy]=0;
cout<<"请输入R在A上的二元关系,行和列之间的输入用空格分开,当要结束时请按两次F6+回车跳出循环"<<endl;
while(cin>>cow>>rol && count!=a*a)
{
p[cow-1][rol-1]=1;
count++;
cout<<count<<endl;
}
//判断二元关系是否可传递
while(count)
{
for(size_t ix=0; ix!=a; ++ix)
for(size_t jy=0; jy!=a; ++jy)
{
if(p[ix][jy]==1)
{
count--;
for(size_t x=0; x!=a; ++x)//第i行与第j行先加后跟第i行的比较
c[x]=p[ix][x]+p[jy][x];
for(x=0; x!=a; ++x)
if(c[x]!=p[ix][x])
flag=count=0;
}
}
}
return flag;
}
void main()
{
bool sentry;//返回的哨兵的值
int length;//集合A的元素个数
cout<<"请输入集合A的元素个数"<<endl;
cin>>length;
sentry=Func(length);
if(sentry)
cout<<"该二元关系是可传递的"<<endl;
else
cout<<"该二元关系是不可传递的"<<endl;
}