1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #include <iostream> #include <vector> #include <string>
using namespace std;
const string YES = "YES"; const string NO = "NO";
const int dy[] = {1, -1, 0, 0}; const int dx[] = {0, 0, 1, -1};
int land_count = 1;
bool is_valid(const vector<vector<char>> &A, const vector<vector<bool>> &is_checked, int y, int x) { if(y >= 10 || x >= 10 || y < 0 || x < 0) return false; if(A[y][x] == 'x' || is_checked[y][x]) return false;
return true; }
int connected_count(const vector<vector<char>> &A, vector<vector<bool>> &is_checked, int y, int x) { is_checked[y][x] = true; int count = 1;
for(int i = 0; i < 4; i++) { int ny = y + dy[i]; int nx = x + dx[i]; if(is_valid(A, is_checked, ny, nx)) { count += connected_count(A, is_checked, ny, nx); } }
return count; }
bool check_matched(const vector<vector<char>> &A, int y, int x) { vector<vector<bool>> is_checked(10, vector<bool>(10, false)); int count = connected_count(A, is_checked, y, x);
return count == land_count; }
void solve(const vector<vector<char>> &A){ for(int i = 0; i < 10; i++) { for(int j = 0; j < 10; j++) { if(A[i][j] == 'o') continue;
if(check_matched(A, i, j)) { cout << YES << endl; return; } } } cout << NO << endl; }
int main(){ vector<vector<char>> A(10, vector<char>(10)); for(int i = 0 ; i < 10 ; i++){ for(int j = 0; j < 10; j++) { cin >> A[i][j]; if(A[i][j] == 'o') land_count++; } } solve(A); return 0; }
|