ZOJ 1589 Professor John【暴力解决】【待改进】

94 篇文章 0 订阅

  
  
        
        
        
差分约束什么的不会,所以只能暴力解决了 具体思路是如果i<j,就找大于j的,假如是k吧,那么就有i<k;反之亦然 //2625748     2011-08-13 16:24:21     Accepted      1589     C++     30     184     ylwh@Unknown //2625741     2011-08-13 16:22:26     Wrong Answer     1589     C++     30     184     ylwh@Unknown //2625729     2011-08-13 16:19:30     Wrong Answer     1589     C++     20     184     ylwh@Unknown #include <stdio.h> #define N 27 struct node { int staue, relation; }map[N][N]; int main() { int ii, i, j, k, m ,n, p; char ch1, ch2, ch3; scanf("%d", &n); for(ii=1; ii<=n; ii++) { for(i=1; i<=26; i++)//错误的将i<=26写成i<26 for(j=1; j<=26; j++) { map[i][j].staue = 1;/*所有没有在输入给出的关系都为1*/ map[i][j].relation = 0;/*没有关系就是0. 小于-1,大于1 */ } scanf("%d", &m); for(i=1; i<=m; i++) { scanf(" %c %c %c", &ch1, &ch2, &ch3); j= ch1 - 'A' + 1; k = ch3 - 'A' + 1; if(ch2 == '<') { map[j][k].relation = -1; map[k][j].relation = 1; } else if(ch2 == '>') { map[k][j].relation = -1; map[j][k].relation = 1; } map[k][j].staue = map[j][k].staue = 0; } for(p=1; p<=26; p++) for(i=1; i<26; i++) for(j=1; j<=26; j++) if(map[i][j].relation == 1) { for(k=1; k<=26; k++) if(map[j][k].relation == 1)// .....X..... { map[i][k].relation = 1; map[k][i].relation = -1; } } else if(map[i][j].relation == -1)//这里刚开始时可能也错了,else前未加大括号,可能使else并到X处。 { for(k=1; k<=26; k++) if(map[j][k].relation == -1) { map[i][k].relation = -1; map[k][i].relation = 1; } } int ok = 0; printf("Case %d:\n", ii); for(i=1; i<=26; i++) for(j=1; j<=26; j++) if(map[i][j].staue && map[i][j].relation == -1) { ok = 1; printf("%c<%c\n", i+'A'-1, j+'A'-1); } if( !ok ) printf("NONE\n"); } return 0; }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值