【POJ 2386】【Lake Counting】【DFS】

#include "iostream"
using namespace std;
#define MAX_map 105
int numx,numy;
char map[MAX_map][MAX_map];
int  flag[MAX_map][MAX_map];
int  dir[8][2]={{0,1},{1,1},{1,0},{0,-1},{-1,-1},{-1,0},{1,-1},{-1,1}};
void dfs(int i,int j);
int main(int argc, char const *argv[])
{
  while(cin>>numx>>numy)
  {
    int ans=0;
    memset(map,0,sizeof(map));
    memset(flag,0,sizeof(flag));
    for (int i = 0; i < numx; ++i)
    {
      for (int j = 0; j < numy; ++j)
      {
        cin>>map[i][j];
      }
    }
    for (int i = 0; i < numx; ++i)
    {
      for (int j = 0; j < numy; ++j)
      {
        if(map[i][j]=='W' && flag[i][j]==0)
        {
          dfs(i,j);
          ans++;
        }
      }
    }
    cout<<ans<<endl;
  }

  return 0;
}
void dfs(int x,int y)
{
  flag[x][y]=1;
  for (int i = 0; i < 8; ++i)
  {
    int x2=x+dir[i][0];
    int y2=y+dir[i][1];
    if(map[x2][y2]=='W' && flag[x2][y2]==0 && x2>=0 && y2>=0 && x2<numx && y2<numy)
    {
      dfs(x2,y2);
    }
  }
}

类似HDU 的1241那道油田的题目,下周和学姐做DFS的专题,所以决定回忆下,其实BFS也能做,不过挺麻烦的。

你可能感兴趣的:(poj,DFS)