将正方形视为连接字符间的边。比方说正方形上存在A+,B-,就从A-往B+连边,表示字符可以通过这个正方形进行变换。
如果能构成环的话就可以无穷大了。。。判环随便写个拓扑什么的...
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 #define ll long long 6 #define ull unsigned long long 7 #define d double 8 using namespace std; 9 bool mp[55][55]; 10 int dl[233],rd[233];; 11 int i,j,k,n,m,l,r; 12 char s[23]; 13 14 int ra,fh;char rx; 15 inline int read(){ 16 rx=getchar(),ra=0,fh=1; 17 while((rx<'0'||rx>'9')&&rx!='-')rx=getchar(); 18 if(rx=='-')fh=-1,rx=getchar(); 19 while(rx>='0'&&rx<='9')ra*=10,ra+=rx-48,rx=getchar();return ra*fh; 20 } 21 int main(){ 22 n=read();int a[5]; 23 for(i=1;i<=n;i++){ 24 scanf("%s",s+1); 25 for(j=1;j<=4;j++)if(s[j<<1]!='0') 26 a[j]=(s[j*2-1]-'A'+1)*2+(s[j<<1]=='-');else a[j]=-233; 27 // for(j=1;j<=4;j++)printf(" %d",a[j]);puts(""); 28 for(j=1;j<4;j++)if(a[j]>0)for(k=j+1;k<=4;k++)if(a[k]>0) 29 // printf(" %d-->%d %d-->%d ",a[j]^1,a[k],a[k]^1,a[j]), 30 mp[a[j]^1][a[k]]=mp[a[k]^1][a[j]]=1; 31 // printf("(%d)",i); 32 } 33 for(i=2;i<=53;i++){ 34 for(j=2;j<=53;j++)if(mp[j][i])rd[i]++; 35 if(!rd[i])dl[++r]=i; 36 } 37 while(l<r) 38 for(int now=dl[++l],i=2;i<=53;i++)if(mp[now][i]&&!--rd[i]) 39 dl[++r]=i; 40 if(r==52)puts("bounded");else puts("unbounded"); 41 }