B=zeros(a)
flag=0
while
flag==0
for
i=
1:
a
for
j=
1:
a
for
k=1:a
B(
i
,
j
)
=
max(min(
R(
i
,
k)
,
R(
k,
j)
)
,
B(
i
,
j
)
)
%R与昌侍R内积,先取小再取誉迅洞大
end
end
end
if
B==R
flag=1
else
R=B%循环计算R传递闭包庆枯
end
end
程序运行通过,很好用
最佳答案#include <stdio.h>
#include <stdlib.h>
#define N 20
#define M 20
main()
{
int i,j,k,m,n
int r1[M],r2[M],a[N],mr[N][N]={0}
FILE * fp
printf("卜中程序自动调用c:/stone2.txt文件内相应数据\n")
fp=fopen("c:\\stone2.txt","r")
fscanf(fp,"%d",&n) /*读取集合元素个数*/
for(i=0i<ni++) /*读取集合元素*/
fscanf(fp,"%d",&a[i])
fscanf(fp,"%d",&m) /*读取关系个数*/
for(k=0k<mk++)
fscanf(fp,"%d,%d",&r1[k],&r2[k])/*读取关系*/
fclose(fp)
printf("自反闭包r(R):\n{")
for(i=0i<ni++) printf("<%d,%d>,",a[i],a[i]) /*输出自反闭包*/
for(k=0k<mk++)
{
if(r1[k]!=r2[k]) printf("<%d,%d>,",r1[k],r2[k])
else continue
}
printf("\b}\n")
printf("对称闭包s(R):\n{") /*输出对称闭包*/
for(k=0k<mk++)
{
if(r1[k]!=r2[k]) printf("<%d,%d>,<%d,%d>,",r1[k],r2[k],r2[k],r1[k])
else printf("<%d,%d>,",r1[k],r2[k])
}
printf("\b}\n")
k=0
for(i=0i<n,k<mi++)
{
if(r1[k]!=a[i]) continue
else
{
for(j=0j<n,k<mj++)/*关系转换成矩阵*/
{
if(r2[k]!=a[j]) continue
else
{
mr[i][j]=1
k++i=0j=0
break
}
}
}
}
printf("关系所型数山对应的关系矩阵:\n")
for(i=0i<ni++)
{ /*打印关系矩阵*/
for(j=0j<nj++)
printf("%5d",mr[i][j])
printf("\n")
}
for(k=0k<nk++)
for(i=0i<ni++)/*warshall*/
for(j=0j<nj++)
mr[i][j]+=mr[i][j]+mr[i][k]*mr[k][j]
for(i=0i<ni++)
for(j=0j<nj++)
{/*把mr[]非0项赋值为1*/
if(!mr[i][j]) continue
else mr[i][j]=1
}
printf("传递闭包对应关系矩阵:\n")
for(i=0i<ni++)
{ /*输出传递闭包对应的关系矩阵*/
for(j=0j<nj++)
printf("%5d",mr[i][j])
printf("\n")
}
system("PAUSE")
}
自己写的,三个闭包都有,包括传递闭包毕汪,看注释就知道了,还是用文件读写,方便数据输入
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)