uva572 Oil Deposits

题意:寻找“@”构成八连通的块数。

思路:深搜入门水题

#include<bits/stdc++.h>
using namespace std;
const int inf=0x7fffffff;
int cnt,v[110][110],n,m,nxt[8][2]={-1,-1,-1,0,-1,1,0,1,1,1,1,0,1,-1,0,-1};
char M[110][110];
void dfs(int x,int y)
{
   v[x][y]=1;
  // cout<<x<<y<<endl;
   for(int i=0;i<8;i++){
    int tx=x+nxt[i][0];
    int ty=y+nxt[i][1];
    //cout<<tx<<ty<<v[tx][ty]<<M[tx][ty]<<endl;
    if(!v[tx][ty]&&tx>=0&&ty>=0&&tx<n&&ty<m&&M[tx][ty]=='@'){
            dfs(tx,ty);
     }
   }
}

int main()
{
    while(cin>>n>>m&&n&&m){
        memset(v,0,sizeof(v));
        for(int i=0;i<n;i++){
            cin>>M[i];
        }
        cnt=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
               if(!v[i][j]&&M[i][j]=='@'){
                cnt++;
                //cout<<"i="<<i<<" j="<<j<<endl;
                dfs(i,j);
               }
            }
        }
        cout<<cnt<<endl;
    }
}


你可能感兴趣的:(uva572 Oil Deposits)