思路:
找出十字形的点状图,然后暴力把所有十字形的点状图的点变成#号型的,最后再所有都看一下有没有,再有点,有就输出NO,没有就输出YES
代码:
#include<iostream>
#include <ostream>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cstring>
#include<string>
#include<cmath>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define ll long long
#define dd double
#define mes(x,y) memset(x,y,sizeof(y))
using namespace std;
ll gcd(ll a,ll b){//���Լ��
return b==0?a:gcd(b,a%b);
}
struct node{
int x,y;
}z[3000];
int main(){
int n;
cin>>n;
int k=0;
char a[100][100];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a[i][j];
if(a[i][j]=='.'){
z[k].x=i;z[k].y=j;k++;
}
}
}
for(int i=0;i<k;i++){
if(z[i].x>0&&z[i].x<n&&z[i].y>0&&z[i].y<n&&a[z[i].x][z[i].y]=='.'&&a[z[i].x+1][z[i].y]=='.'&&a[z[i].x][z[i].y+1]=='.'&&a[z[i].x-1][z[i].y]=='.'&&a[z[i].x][z[i].y-1]=='.'){
a[z[i].x][z[i].y]='#';
a[z[i].x+1][z[i].y]='#';
a[z[i].x][z[i].y+1]='#';
a[z[i].x-1][z[i].y]='#';
a[z[i].x][z[i].y-1]='#';
}
}//暴力把所有十字形的点状图的点变成#号型的
int flag=1;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[i][j]=='.'){
flag=0;break;
}
}
if(flag==0)break;
}//最后再所有都看一下有没有,再有点,有就输出NO,没有就输出YES
if(flag==1)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}