ZOJ 1709 Oil Deposits

又是一个BFS,最近搜索上瘾了……

#include <iostream>
#include <queue>
using namespace std;
char Rer[101][101];
struct NODE
{
 int x,y;
};
int main()
{
 NODE MYKEY[8];
 MYKEY[0].x = 1;
 MYKEY[0].y = 0;
 MYKEY[1].x = 0;
 MYKEY[1].y = 1;
 MYKEY[2].x = -1;
 MYKEY[2].y = 0;
 MYKEY[3].x = 0;
 MYKEY[3].y = -1;
 MYKEY[4].x = 1;
 MYKEY[4].y = 1;
 MYKEY[5].x = -1;
 MYKEY[5].y = 1;
 MYKEY[6].x = 1;
 MYKEY[6].y = -1;
 MYKEY[7].x = -1;
 MYKEY[7].y = -1;

 queue<NODE> IQ;
 NODE Temp,TT;
 int m,n,i,j,cnt,x;
 while(cin >> m >> n)
 {
  if(m==0&&n==0) break;
  for(i=0;i<m;++i)
   for(j=0;j<n;++j)
   {
    cin >> Rer[i][j];
   }
  cnt = 0;
  for(i=0;i<m;++i)
   for(j=0;j<n;++j)
   {
    if(Rer[i][j]=='@')
    {
     cnt++;
     Temp.x = i;
     Temp.y = j;
     Rer[i][j] = '*';
     IQ.push(Temp);
     while(!IQ.empty())
     {
      Temp = IQ.front();
      IQ.pop();
      for(x=0;x<8;++x)
      {
       TT.x = Temp.x + MYKEY[x].x;
       TT.y = Temp.y + MYKEY[x].y;
       //cout << "------------->" << TT.x << "<----------------" << TT.y << endl;
       if(TT.x>=0&&TT.x<m&&TT.y>=0&&TT.y<n&&Rer[TT.x][TT.y]=='@')
       {
        Rer[TT.x][TT.y] = '*';
        IQ.push(TT);
       }
      }
     }
    }
   }
   cout << cnt << endl;
 }
 return 0;
}

posted on 2006-09-23 10:20  AnewR  阅读(285)  评论(0)    收藏  举报