给出几个变量的相互大小关系,要求输出能推出来的关系。 显然大小关系只有一种,大于或者小于,所以是都是单向的。计算完闭包之后与原来的比较,多出来的就是推出来的关系。 这题竟然一次就编译成功而且一次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; }