zoukankan      html  css  js  c++  java
  • HDU 1241 Oil Deposits

    \(flood-fill\)裸题

    \(DFS\)

    const int N=110;
    char g[N][N];
    bool vis[N][N];
    int n,m;
    
    bool check(int x,int y)
    {
        return x>=0 && x<n && y>=0 && y<m;
    }
    
    void dfs(int x,int y)
    {
        vis[x][y]=true;
    
        for(int i=0;i<8;i++)
        {
            int a=x+dx8[i],b=y+dy8[i];
            if(!check(a,b) || g[a][b] == '*') continue;
            if(!vis[a][b])
                dfs(a,b);
        }
    }
    
    int main()
    {
        while(cin>>n>>m)
        {
            if(!n && !m) break;
    
            memset(vis,0,sizeof vis);
    
            for(int i=0;i<n;i++) scanf("%s",&g[i]);
    
            int cnt=0;
            for(int i=0;i<n;i++)
                for(int j=0;j<m;j++)
                    if(g[i][j] == '@' && !vis[i][j])
                    {
                        dfs(i,j);
                        cnt++;
                    }
            cout<<cnt<<endl;
        }
        //system("pause");
    }
    

    \(BFS\)

    const int N=110;
    char g[N][N];
    bool vis[N][N];
    int n,m;
    
    bool check(int x,int y)
    {
        return x>=0 && x<n && y>=0 && y<m;
    }
    
    void bfs(int sx,int sy)
    {
        queue<PII> q;
        q.push({sx,sy});
        vis[sx][sy]=true;
    
        while(q.size())
        {
            PII t=q.front();
            q.pop();
    
            for(int i=0;i<8;i++)
            {
                int a=t.fi+dx8[i],b=t.se+dy8[i];
                if(!check(a,b) || g[a][b] == '*') continue;
                if(!vis[a][b])
                {
                    vis[a][b]=true;
                    q.push({a,b});
                }
            }
        }
    }
    
    int main()
    {
        while(cin>>n>>m)
        {
            if(!n && !m) break;
    
            memset(vis,0,sizeof vis);
    
            for(int i=0;i<n;i++) scanf("%s",&g[i]);
    
            int cnt=0;
            for(int i=0;i<n;i++)
                for(int j=0;j<m;j++)
                    if(g[i][j] == '@' && !vis[i][j])
                    {
                        bfs(i,j);
                        cnt++;
                    }
            cout<<cnt<<endl;
        }
        //system("pause");
    }
    
  • 相关阅读:
    C语言 常用单词
    导航菜单
    css3中的过渡(transition)
    HTML CSS 常用英语单词
    css基础
    XHTML基础
    MongoDB作为windows服务来安装-2
    MongoDB安装成windows 服务
    .NET平台MongoDB下使用JobStore存储Quartz.Net的Job,Trigger数据
    C# mongodb 类库
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14157526.html
Copyright © 2011-2022 走看看