zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    并发编程知识点剖析
    JavaScript 实现留言框
    JavaScript 实现简单的 弹出框关闭框
    网络编程知识点剖析
    css清除浮动的方法
    css盒模型
    CSS的继承性和层叠性
    转载《ionic 热更新 cordova-hot-code-push》
    转《js闭包与内存泄漏》
    前端存储loaclForage
  • 原文地址:https://www.cnblogs.com/cute/p/3417645.html
Copyright © 2011-2022 走看看