• POJ 1979 dfs和bfs两种解法


     

    fengyun@fengyun-server:~/learn/acm/poj$ cat 1979.cpp
    #include<cstdio>
    #include<iostream>
    #include<string>
    #include<algorithm>
    #include<iterator>
    #include<sstream>//istringstream
    #include<cstring>
    #include<queue>


    using namespace std;

    char map[21][21];
    char visited[21][21];
    int w, h;
    int ans;

    void dfs(int i, int j)
    {
       if(i<0||i>=h||j<0||j>=w)
           return;
       if(map[i][j]=='#')
           return;
       if(map[i][j]=='.'&&visited[i][j]==0)
       {
            ans++;
            visited[i][j]=1;
            dfs(i-1,j);
            dfs(i+1,j);
            dfs(i,j+1);
            dfs(i,j-1);
       }

    }

    int dir[4][2]={
        {-1, 0},
        {1, 0},
        {0, 1},
        {0, -1},
    };
    void bfs(int i, int j)
    {
        queue<int> q;
        q.push(i*w+j);
        visited[i][j]=1;

        while(!q.empty())
        {
            //pop
            //add neighbors
            int ni,nj;
            ni=q.front()/w;
            nj=q.front()%w;
            q.pop();
            ans++;
            for(int k=0;k<4;k++)
            {
                int row=ni+dir[k][0];
                int col=nj+dir[k][1];
                if(row>=0&&row<h&&col>=0&&col<w&&map[row][col]=='.'&&visited[row][col]==0)
                {
                    visited[row][col]=1;
                    q.push(row*w+col);
                }
               
            }
           
        }


    }

    int main()
    {
        while(cin>>w>>h && (w||h))
        {
            int x, y;
            memset(visited, 0, sizeof(visited));
            ans=0;
            for(int i=0;i<h;i++)
            {
                for(int j=0;j<w;j++)
                {
                    cin>>map[i][j];
                    if(map[i][j]=='@')
                    {
                        x=i;
                        y=j;
                        map[i][j]='.';
                    }
                }
            }

            //dfs(x,y);
            bfs(x,y);
            cout<<ans<<endl;
        }

        return 0;
    }

  • 相关阅读:
    C# .NET 在一个线程中访问另一个线程的控件 方法汇总 (转载)
    SQL Server 2008数据库复制实现数据库同步备份(2) (转载)
    对《30个提高Web程序执行效率的好经验》的理解
    Web开发常用速查手册大全(100+)(转载)
    web.config 文件详解(转载)
    常用Web Service 收藏
    Microsoft training Kits
    SSH+JQuery整合
    DWR框架在SHH中的配置说明
    卡尔曼滤波器 Kalman Filter
  • 原文地址:https://www.cnblogs.com/cute/p/3417645.html
Copyright © 2020-2023  润新知