12615
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...