bzoj1751 [Usaco2005 qua]Lake Counting

来源:互联网 发布:js设置边框颜色 编辑:程序博客网 时间:2024/06/05 11:43

bfs找出联通块个数就好了

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)using namespace std;const int N=105;int n,m,ans;const int dx[8]={-1,-1,-1,1,1,1,0,0};const int dy[8]={-1,0,1,-1,0,1,1,-1};char s[N][N];struct node{    int x,y;}q[N*N];bool vis[N][N];inline void bfs(int x,int y){    vis[x][y]=1;    int t=0,w=1;    q[1].x=x;    q[1].y=y;    while (t<w)    {        t++;        fo(k,0,7)        {            int x1=q[t].x+dx[k];            int y1=q[t].y+dy[k];            if (x1>=1&&x1<=n&&y1>=1&&y1<=m&&!vis[x1][y1]&&s[x1][y1]=='W')            {                vis[x1][y1]=1;                q[++w].x=x1;                q[w].y=y1;            }        }    }}int main(){    scanf("%d%d",&n,&m);    fo(i,1,n)    {        scanf("%s",s[i]+1);    }    fo(i,1,n)    fo(j,1,m)    if (s[i][j]=='W'&&!vis[i][j])    {        bfs(i,j);        ans++;    }    printf("%d\n",ans);}
原创粉丝点击