美文网首页
习题4-1 象棋

习题4-1 象棋

作者: laochonger | 来源:发表于2018-05-27 10:05 被阅读0次
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
    int n,x,y,a,b;
char qipan[15][15];

int is_shuai(){
    int flag = 0;
    for(int i = a+1; i <= 10; i++){
        if(qipan[i][b] != 'O'&&qipan[i][b]!='G'){
            break;
        }
        if(qipan[i][b] == 'G'){
            flag = 1;
            break;
        }
    }
    
    
    
    
    
    return flag;
}

int is_ju(){
    int flag = 0;
    for(int i = a+1; i <= 10; i++){
        if(qipan[i][b] != 'O'&&qipan[i][b]!='R'){
            break;
        }
        if(qipan[i][b] == 'R'){
            flag = 1;
            break;
        }
    }
    if(!flag){
        for(int i = a-1; i >= 1; i--){
            if(qipan[i][b] != 'O'&&qipan[i][b]!='R'){
                break;
            }
            if(qipan[i][b] == 'R'){
                flag = 1;
                break;
            }
        }
    }
    if(!flag){
        for(int i = b+1; i <= 9; i++){
            if(qipan[a][i] != 'O'&&qipan[a][i]!='R'){
                break;
            }
            if(qipan[a][i] == 'R'){
                flag = 1;
                break;
            }
        }
    }
    if(!flag){
        for(int i = b-1; i >= 1; i--){
            if(qipan[a][i] != 'O'&&qipan[a][i]!='R'){
                break;
            }
            if(qipan[a][i] == 'R'){
                flag = 1;
                break;
            }
        }
    }
    
    return flag;
}

int is_pao(){
    int flag = 0;
    int cnt = 0;
    for(int i = a+1; i <= 10; i++){
        if(qipan[i][b] != 'O'&&qipan[i][b]!='C'){
            cnt++;
        }
        if(qipan[i][b] == 'C'){
            cnt++;
            if(cnt == 2) flag = 1;
        }
    }
    if(!flag){
        cnt = 0;
        for(int i = a-1; i >= 1; i--){
            if(qipan[i][b] != 'O'&&qipan[i][b]!='C'){
                cnt++;
            }
            if(qipan[i][b] == 'C'){
                cnt++;
                if(cnt == 2) flag = 1;
            }
        }
    }
    if(!flag){
        cnt = 0;
        for(int i = b+1; i <= 9; i++){
            if(qipan[i][b] != 'O'&&qipan[i][b]!='C'){
                cnt++;
            }
            if(qipan[i][b] == 'C'){
                cnt++;
                if(cnt == 2) flag = 1;
            }
        }
    }
    if(!flag){
        cnt = 0;
        for(int i = b-1; i >= 1; i--){
            if(qipan[i][b] != 'O'&&qipan[i][b]!='C'){
                cnt++;
            }
            if(qipan[i][b] == 'C'){
                cnt++;
                if(cnt == 2) flag = 1;
            }
        }
    }
    
    return flag;
}

int is_ma(){
    int flag = 0;
    if(a-2>=1){
        if(qipan[a-2][b-1] == 'H'&&qipan[a-1][b-1] == 'O') flag = 1;
        if(qipan[a-2][b+1] == 'H'&&qipan[a-1][b+1] == 'O') flag = 1;
    }
    if(!flag && a-1>=1){
        if(qipan[a-1][b-2] == 'H'&&qipan[a-1][b-1] == 'O') flag = 1;
        if(qipan[a-1][b+2] == 'H'&&qipan[a-1][b+1] == 'O') flag = 1;
    }
    if(qipan[a+2][b-1] == 'H'&&qipan[a+1][b-1] == 'O') flag = 1;
    if(qipan[a+1][b-2] == 'H'&&qipan[a+1][b-1] == 'O') flag = 1;
    if(qipan[a+2][b+1] == 'H'&&qipan[a+1][b+1] == 'O') flag = 1;
    if(qipan[a+1][b+2] == 'H'&&qipan[a+1][b+1] == 'O') flag = 1;

    return flag;
}

int go(){
    int flag = 1;
    if(a<1||a>3||b<4||b>6) return 1;
    if(is_shuai()) return 1;
    if(is_ju()) return 1;
    if(is_pao()) return 1;
    if(is_ma()) return 1;
    return -1; 
}



int main(){
    while(  scanf("%d%d%d", &n,&a,&b) == 3){
        if(n == 0) break;
        memset(qipan, 'O', sizeof(qipan));
        
        while(n--){
            char ch;
            cin>>ch;
            scanf("%d%d", &x, &y);
            qipan[x][y] = ch;
        }
        int flag = 0;
        char t;
        if(is_shuai()) flag = -1;
        if(flag == 0){
            b--;  t = qipan[a][b]; qipan[a][b] = 'O'; if(go() == 1) flag=1; qipan[a][b] = t; b++;
        }
        if(flag == 1){
            b++;  t = qipan[a][b]; qipan[a][b] = 'O'; if(go() == 1) flag++; qipan[a][b] = t; b--;
        }
        if(flag == 2){
            a++;  t = qipan[a][b]; qipan[a][b] = 'O'; if(go() == 1) flag++; qipan[a][b] = t; a--;
        }
        if(flag == 3){
            a--;  t = qipan[a][b]; qipan[a][b] = 'O'; if(go() == 1) flag++; qipan[a][b] = t; a++;
        }
        if(flag == 4){
            printf("YES\n");
        }else{
            printf("NO\n");
        }
    }
    return 0;   
} 

相关文章

网友评论

      本文标题:习题4-1 象棋

      本文链接:https://www.haomeiwen.com/subject/bhcbjftx.html