zoukankan      html  css  js  c++  java
  • HDU 1241

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241

    题意:

    求某块平面上,连通块的数量。一个油田格子若周围八个方向也有一个油田格子,则认为两者相连通。

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef pair<int,int> pii;
    const int maxn=105;
    const int dx[8]={0,1,0,-1,1,1,-1,-1};
    const int dy[8]={1,0,-1,0,1,-1,1,-1};
    
    int m,n;
    char mp[maxn][maxn];
    int vis[maxn][maxn];
    queue<pii> Q;
    inline bool in(pii o) {
        return 1<=o.first && o.first<=m && 1<=o.second && o.second<=n;
    }
    void bfs(int x,int y)
    {
        while(!Q.empty()) Q.pop();
        vis[x][y]=1;
        Q.push(make_pair(x,y));
        while(!Q.empty())
        {
            pii now=Q.front(); Q.pop();
            for(int k=0;k<8;k++)
            {
                pii nxt=make_pair(now.first+dx[k],now.second+dy[k]);
                if(!in(nxt)) continue;
                if(mp[nxt.first][nxt.second]=='*') continue;
                if(vis[nxt.first][nxt.second]) continue;
                Q.push(nxt);
                vis[nxt.first][nxt.second]=1;
            }
        }
    }
    
    int main()
    {
        while(scanf("%d%d",&m,&n) && m*n>0)
        {
            for(int i=1;i<=m;i++) scanf("%s",mp[i]+1);
            memset(vis,0,sizeof(vis));
            int cnt=0;
            for(int i=1;i<=m;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    if(mp[i][j]=='@' && vis[i][j]==0)
                    {
                        cnt++;
                        bfs(i,j);
                    }
                }
            }
            cout<<cnt<<endl;
        }
    }
  • 相关阅读:
    使用RF(robotframework)要安装哪些库
    MYSQL题目练习专用
    MySQL字段拼接
    WPF样式
    WPF数据模板
    WPF控件模板
    WPF布局
    面向对象程序设计原则
    设计模式之策略模式
    设计模式之简单工厂模式
  • 原文地址:https://www.cnblogs.com/dilthey/p/9884125.html
Copyright © 2011-2022 走看看