您的位置:首页 > 其它

离散题目18(传递闭包)

2017-06-10 23:34 211 查看
离散题目18

Time Limit: 1000MS Memory Limit: 65536KB

Submit Statistic

Problem Description

给出一个集合A和A上的关系R,求关系R的传递闭包。

例如:

A={0,1,2} , R={<0,0>,<1,0>,<2,2>,<1,2>,<2,1>}

t(R) = {<0,0>,<1,0>,<2,2>,<2,1>,<1,2>,<1,1>,<2,0>};

Input

多组输入,输入n、m,集合A={0, 1, …, n-1 };m代表关系的数量,n、m不超过20.

Output

每组输入输出t(R),根据t(R)中序偶的第一个数字升序排序,如果第一个数字相同,根据第二个升序排序。

Example Input

3 5

0 0

1 0

2 2

1 2

2 1

Example Output

0 0

1 0

1 1

1 2

2 0

2 1

2 2

沃舍尔算法

include <stdio.h>
include <stdlib.h>
include<string.h>

struct
{
int x,y;
} s1[10000000]
;
int a[1000][1000];
int main()
{
char s[10000];
int i,j,f,n,k,t,m,b[1000],x,y;

while(~scanf("%d%d",&n,&m))
{
memset(a,0,sizeof(a));
f=1;
for(i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
a[x][y]=1;
}
for<
4000
/span>(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(a[j][i]>=1)
{
for(k=0;k<n;k++)
{
a[j][k]=a[i][k]+a[j][k];
}
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i][j]>=1)
printf("%d %d\n",i,j);

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: