UVa Self-Assembly(topo sort)[待AC]
2016-05-01 21:46
531 查看
#include<iostream> #include<cstring> #include<cstdio> #include<cctype> using namespace std; int G[52][52],c[52]; bool topo(int u) { // printf("%c ",u%26+'A'); c[u]=-1; //visiting; for(int v=0;v<52;v++) { if(G[u][v]){ // printf("%c %c\n",u%26+'A',v%26+'A'); int p=v<26?v+26:v-26; if(c[p]<0) return true; else if(!c[p]&&topo(p)) return true; } } c[u]=1; return false; } void print() { for(int i=0;i<52;i++) cout<<c[i]<<' '; cout<<endl; } bool check() { for(int u=0;u<52;u++) { if(!c[u]) { // cout<<u<<endl; if(topo(u)) { return true; } // print(); } } return false; } int main() { int n; while(scanf("%d",&n)==1&&n) { char s[10]; memset(G,0,sizeof(G)); memset(c,0,sizeof(c)); for(int i=0;i<n;i++) { scanf("%s",s); int letter[3]={0},sign[3]={0},p=0; for(int i=0;i<8;i+=2) { if(isdigit(s[i])) continue; letter[p]=s[i]-'A'; sign[p]=s[i+1]=='+'?0:26; p++; } for(int i=0;i<3;i++) { int l=letter[i]+sign[i]; // c[l]=-1; //existed for(int j=1;j<=2;j++) { int m=letter[(i+j)%3]+sign[(i+j)%3]; G[l][m]=1; // printf("%c %c\n",m%26+'A',l%26+'A'); } } } if(check()) printf("un"); printf("bounded\n"); } return 0; }
相关文章推荐
- Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config
- Linux账号管理
- Linux内核学习总结
- centOS解决乱码问题
- xampp linux 安装
- 对linux内核学习的一点感受
- Linux内核学习总结
- linux find -regex 使用正则表达式
- linux find 实例
- 【Linux】配置Linux系统
- linux 缺少libxxx.a 静态链接库
- 【三层架构】基础总结
- 基于MT7688模块的开发笔记4——编译Linux系统和Uboot
- Linux命令简写和全称
- 对Linux系统的理解以及学习Linux内核的心得
- Python运维自动化--nginx配置文件对比
- linux常用命令-part2
- linux常用命令-part1
- linux常用命令-part3
- Linux系统环境快速熟悉