题目描述
当我们知道一组大小关系之后,可判断所有关系是否都能成立,即关系间没有矛盾。
例如:A<B, A<C, B<C 通过这组关系我们可以得到A<B<C ,所有关系都成立,没有矛盾。
若 A<B, B<C, C<A 通过前两个关系我们得到 A<B<C ,这个关系与C<A矛盾,所有关系不能同时成立。
现在我们知道m个关系,请判断这m个关系是否能成立,成立输出“YES”,否则输出“NO”。
输入
多组数据,每组数据如下:
第一行有两个字母m。 m代表m组关系(1<=m<=400),接下来m行每行有一个关系,用两个不同的字母和一个符号表示。(输入保证字母在‘A’-‘Z’之间,关系符号只有 > , <)
输出
对于每组数据输出“YES”或“NO”.
样例输入
3
A<B
A<C
B<C
3
A<B
B<C
C<A
样例输出
YES
NO
#include<stdio.h> char a[440][4],flag,qian,hou; void is(int n,char qian,char hou) { if(flag==0) return ; int i; for(i=0;i<n;i++) { if(a[i][0]==hou) { if(a[i][1]==qian) { flag=0; break; } else is(n,hou,a[i][1]); } } } int main() { int m; while(scanf("%d",&m)!=EOF) { flag=1; for(int i=0;i<m;i++) { char c[5]; scanf("%s",c); if(c[1]=='<') { a[i][0]=c[0]; a[i][1]=c[2]; } else { a[i][0]=c[2]; a[i][1]=c[0]; } if(flag) is(i,a[i][0],a[i][1]); } if(flag) printf("YES\n"); else printf("NO\n"); } return 0; }