http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=589 简单闭包。。。注意一下用scanf来读入字符时getchar()使用就ok了 #include<stdio.h> #include<string.h> int re1[30][30],re2[30][30]; int main() { //freopen("a.txt","r",stdin); int t; scanf("%d",&t); int m; for(m=1;m<=t;m++) { memset(re1,0,sizeof(re1)); memset(re2,0,sizeof(re2)); int n; scanf("%d",&n); getchar();//!!! while(n--) { char a,b,c; scanf("%c%c%c",&a,&b,&c); getchar();//!!! if(b=='<') re1[a-'A'][c-'A']=re2[a-'A'][c-'A']=1; else re1[c-'A'][a-'A']=re2[c-'A'][a-'A']=1; } int i,j,k; for(i=0;i<26;i++) for(j=0;j<26;j++) for(k=0;k<26;k++) if(re2[j][i] && re2[i][k])//i作为中间点 re2[j][k]=1; printf("Case %d:/n",m); int flag=0; for(i=0;i<26;i++) for(j=0;j<26;j++) if(!re1[i][j] && re2[i][j]) { printf("%c<%c/n,i+'A',j+'A'); flag=1; } if(!flag)printf("NONE/n"); } return 0; }