码迷,mamicode.com
首页 > 其他好文 > 详细

模拟+bfs——cf1344D

时间:2020-05-08 10:05:07      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:space   namespace   include   define   col   scan   code   fine   一起   

#include<bits/stdc++.h>
using namespace std;
#define N 2005
 
char s[N][N];
int n,m,vis[N][N],ans,f1[N],f2[N];
 
void dfs(int i,int j){
    vis[i][j]=1;
    if(i+1<=n && s[i+1][j]==# && !vis[i+1][j])
        dfs(i+1,j);
    if(j-1>=1 && s[i][j-1]==# && !vis[i][j-1])
        dfs(i,j-1);
    if(i-1>=1 && s[i-1][j]==# && !vis[i-1][j])
        dfs(i-1,j);
    if(j+1<=m && s[i][j+1]==# && !vis[i][j+1])
        dfs(i,j+1);
    
}
 
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        scanf("%s",s[i]+1);
    int ff=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            if(s[i][j]==#)ff=1;
        }
    if(!ff){
        cout<<0<<\n;
         return 0;
    }
    
    //所有同行同列的#必须挨在一起 
    for(int i=1;i<=n;i++){
        int L=m+1,R=0;
        for(int j=1;j<=m;j++)
            if(s[i][j]==#)R=j;
        for(int j=m;j>=1;j--)
            if(s[i][j]==#)L=j;
        for(int j=L;j<=R;j++)
            if(s[i][j]==.){
                puts("-1");return 0;
            }
    }
    for(int j=1;j<=m;j++){
        int U=n+1,D=0;
        for(int i=1;i<=n;i++)
            if(s[i][j]==#)D=i;
        for(int i=n;i>=1;i--)
            if(s[i][j]==#)U=i;
        for(int i=U;i<=D;i++)
            if(s[i][j]==.){
                puts("-1");return 0;
            }
    }
    
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)
            if(s[i][j]==#)f1[i]=1;
    }
    for(int j=1;j<=m;j++){
        for(int i=1;i<=n;i++)
            if(s[i][j]==#)f2[j]=1;
    }
    int c1=0,c2=0;
    for(int i=1;i<=n;i++)if(f1[i]==0)c1++;
    for(int j=1;j<=m;j++)if(f2[j]==0)c2++;
    if(c1&&!c2 || !c1&&c2){puts("-1");return 0;}
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(!vis[i][j] && s[i][j]==#)++ans,dfs(i,j);
    
    cout<<ans<<\n;
    
}

 

模拟+bfs——cf1344D

标签:space   namespace   include   define   col   scan   code   fine   一起   

原文地址:https://www.cnblogs.com/zsben991126/p/12848411.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!