12615

 avatar
unknown
c_cpp
2 years ago
1.4 kB
6
Indexable
#include <stdio.h>
#define MAX 110

int n, flag = 0;
int tmp[6];//目前有哪幾個字被跑過/沒被跑過
char word[6] = "CPASG";//跑過這幾個字即為成功
char s[MAX][MAX];//儲存地圖
int map[MAX][MAX];//地圖上的點若已經被檢查過->設為1

int end(){//檢查是否每個字母都已經跑過
    for(int i = 0; i < 5; i++){
        if(tmp[i] != 1) return 0;
    }
    return 1;
}

void check(int a, int b){
    if(end() == 1) {
        flag = 1;
        return;
    }
    for(int i = -2; i <= 2; i++){
        for(int j = -2; j <= 2; j++){
            if(i*i + j*j != 5 || a+i <= 0 || a+i > n || b+j <= 0 || b+j > n) continue;
            for(int k = 0; k < 5; k++){
                if(s[a+i][b+j] == word[k] && map[a+i][b+j] == 0){
                    tmp[k] = 1;
                    //printf("%d %d\n", a+i, b+j);
                    map[a+i][b+j] = 1;
                    check(a+i, b+j);
                    
                }
            }
        }
    }
    return;
}

int main(){
    
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            scanf(" %c", &s[i][j]);
        }
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            if(s[i][j] == 'I') check(i, j);
        }
    }

    if(flag == 0) printf("NO\n");
    else printf("YES\n");
}
Editor is loading...