Gym - 100971J

 

 

 

 

 

 

 

题目:http://codeforces.com/gym/100971/problem/J 

题目理解:chrome翻译的其中一段文字:从每个自由细胞中,只有通过共享一侧的细胞移动,才有可能到达所有其他自由细胞。

所有细胞是连通的,AB之间连通。

#include<vector>
#include<iostream>
#include<string>
using namespace std;
int main()
{
    int n, m;
    cin >> n >> m;
    int cnt = 0;
    bool flag = true;
    vector<string> a(n);//定义存储n个string类型元素的向量容器
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];//按行输入,输入第i行
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {//cnt计算内部点(i,j)(非#点)周围有几个不是#
            if (a[i][j] == '#')//如果(i,j)这个点是#退出当前循环,继续下一个循环
                continue;
            cnt = 0;
            if (i != 0 && a[i - 1][j] != '#')//如果该点的上方不是#,cnt++
                cnt++;
            if (i != n - 1 && a[i + 1][j] != '#')
                cnt++;
            if (j != 0 && a[i][j - 1] != '#')
                cnt++;
            if (j != m-1 && a[i][j + 1] != '#')
                cnt++;
            if (cnt >= 3)//若(i,j)的四周有3或4个不是#,即存在T型区域,输出YES并结束
            {
                cout << "YES" << endl;
                return 0;
            }
            if (cnt == 1)//如果内部点(非#点)存在四周只有一个不是#,则不存在
                flag = false;//false赋值给flag
        }
    }
    if (flag)
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
    return 0;
}
  

 

posted on 2018-07-17 14:42  Misko  阅读(192)  评论(0编辑  收藏  举报