HDU

来源:互联网 发布:起点网络写手新手收入 编辑:程序博客网 时间:2024/06/05 11:35
///油田   这个题是真的水  就是判断有多少个联通块  很简单 8个方向进行走一波  然后标记走完一波就ans++;#include<cstdio>#include<cstring>using namespace std;const int maxn=1e2+7;int n,m,ans;char str[maxn][maxn];bool vis[maxn][maxn];void dfs(int x,int y)///用dfs去标记这个联通块的坐标,以防下次搞事情的时候再次提到;{   vis[x][y]=1;   for(int i=-1;i<=1;i++)   {       for(int j=-1;j<=1;j++)       {           if(!vis[x+i][y+j]&&str[x+i][y+j]=='@'&&x+i>=0&&x+i<=n-1&&y+j>=0&&y+j<=m-1) dfs(x+i,y+j);       }   }}int main (){    while(scanf("%d %d",&n,&m))    {        if(n==m&&n==0) break;        for(int i=0;i<n;i++)            scanf("%s",str[i]);            ///本来想一个字符一个字符输入进去的  后来看不下去了  直接就%s走一波水水了;        ans=0;        memset(vis,0,sizeof(vis));        for(int i=0;i<n;i++)            for(int j=0;j<m;j++)            {                if(!vis[i][j]&&str[i][j]=='@')                {                    dfs(i,j);                    ans++;                }            }        printf("%d\n",ans);    }    return 0;}