12615
unknown
c_cpp
3 years ago
1.4 kB
9
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...