UVA1572Self-Assembly

来源:互联网 发布:sdn会取代那些传统网络 编辑:程序博客网 时间:2024/06/06 11:49
//UVA1572Self-Assemly#include<cstdio>#include<cstring>#include<cstdlib>//#define LOCALint num(char a1, char a2) {return (a1 - 'A') * 2 + (a2 == '+' ? 0 : 1);}char G[60][60];int visited[60];void connect(char a1, char a2, char b1, char b2) {if(a1 == '0' || b1 == '0') return ;int u = num(a1, a2)^1;//最低位取反,使得所表示的元素正负号反向 int v = num(b1, b2);G[u][v] = 1; } bool dfs(int i) {visited[i] = -1;//正在被访问中for(int j = 0; j < 52; j++) {    if(G[i][j] && visited[j] < 0) return false;if(G[i][j] && !visited[j] && !dfs(j)) return false;}visited[i] = 1;//访问完成return true; }bool Nocycle() {for(int i = 0; i < 52; i++) {if(!visited[i] && !dfs(i)) return false;}return true;}int main() {int n;#ifdef LOCALfreopen("UVA1572in.txt", "r", stdin);freopen("UVA1572out.txt", "w", stdout);#endifwhile((scanf("%d", &n)) == 1 && n) {char s[10];memset(G, 0, sizeof(G));memset(visited, 0, sizeof(visited));while(n--) {scanf("%s", s);for(int i = 0; i < 4; i++) {for(int j = 0; j < 4; j++) {if(i != j) {connect(s[i * 2], s[i * 2 + 1], s[j * 2], s[j * 2 + 1]);//制造有向边 }}}}if(Nocycle()) printf("bounded\n");else printf("unbounded\n");}return 0;}/*3A+00A+A+ 00B+D+A- B-C+00C+1K+K-Q+Q-*/

原创粉丝点击