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

来源:互联网 发布:java 访问hadoop hdfs 编辑:程序博客网 时间:2024/05/01 12:23
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    差分约束什么的不会,所以只能暴力解决了具体思路是如果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 27struct 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<26for(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;}


原创粉丝点击