您的位置:首页 > Web前端

ZOJ 1589 Professor John (图的传递闭包)

2010-08-06 17:42 369 查看
给出几个变量的相互大小关系,要求输出能推出来的关系。

显然大小关系只有一种,大于或者小于,所以是都是单向的。计算完闭包之后与原来的比较,多出来的就是推出来的关系。

这题竟然一次就编译成功而且一次AC。。。哈哈,庆祝。。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(void)
{
int mat1[27][27],mat2[27][27];
int cases,relation;
char a[5];
int i,j,k,r;
int flag;
int from,to;
scanf("%d",&cases);
for( i = 1; i <= cases; i++ )
{
memset(mat1,0,sizeof(mat1));
memset(mat2,0,sizeof(mat2));
scanf("%d",&relation);
while( relation-- )
{
scanf("%s",a);
from = a[0] - 'A' + 1;
to = a[2] - 'A' + 1;
if( a[1] == '<' )
mat1[from][to]=mat2[from][to]=1;
else
mat1[to][from]=mat2[to][from]=1;
}

for( k = 1; k <= 26; k++ )
for( j = 1; j <= 26; j++ )
for( r = 1; r <= 26; r++ )
if( mat2[j][k] && mat2[k][r] )
mat2[j][r] = 1;

printf("Case %d:/n",i);
for( k = 1,flag = 0; k <= 26; k++ )
for( j = 1; j <= 26; j++ )
if( mat1[k][j] == 0 && mat2[k][j])
{
flag = 1;
printf("%c<%c/n",k+'A'-1,j+'A'-1);
}
if(!flag)
printf("NONE/n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: