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");
    }
    
  • 相关阅读:
    域渗透基础(二)
    域渗透基础(一)
    域环境搭建
    java基础(五)-----new一个对象的具体过程
    数据结构(八)-----散列表
    数据结构(七)-----跳表
    数据结构(六)-----队列
    数据结构(五)-----栈
    数据结构(四)-----链表
    数据结构(三)-----数组
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14157526.html
Copyright © 2011-2022 走看看