poj1562深搜

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <climits>
#include <string>
#include <iostream>
#include <map>
#include <cstdlib>
#include <list>
#include <set>
#include <queue>
#include <stack>
#define GG getchar();
using namespace std;

int dx[9]={0,-1,1,0,1,-1,1,-1};
int dy[9]={1,0,0,-1,1,-1,-1,1};

int n,m;
int Map[200][200],vis[200][200];
void dfs(int x,int y)
{
  //  if(vis[x][y]) return ;
    vis[x][y]=1;
    for(int i=0;i<8;i++){
        int xx=dx[i]+x;int yy=dy[i]+y;
        if(xx>=0&&xx<n&&yy>=0&&yy<m&&!vis[xx][yy]&&Map[xx][yy]){
           // cout<<x<<" " <<y<<endl;
       // cout<<xx<<" "<<yy<<endl;system("pause");
            vis[xx][yy]=1;
            dfs(xx,yy);
        }
    }
}
int main()
{
    while(cin>>n>>m,n||m){
        GG;
        int ans=0;
        memset(vis,0,sizeof(vis));
        memset(Map,0,sizeof(Map));
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                char c;
                cin>>c;
                if(c=='*'){
                    Map[i][j]=0;
                }
                else Map[i][j]=1;
            }
            GG;
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(Map[i][j]&&!vis[i][j]){
                    ans++;dfs(i,j);
                }
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/yigexigua/p/3845112.html