油田问题 UVA 572

来源:互联网 发布:cmm软件内涵 编辑:程序博客网 时间:2024/05/06 04:06

多组案例,每组案例输入一个m行n列的字符矩阵,统计字符'@'组成多少个连通块。如果两个字符'@'所在的格子相邻(横、竖或对角线),则说明它们属于同一连通块。

案例:

       Sample Input

       1 1

       *

       3 5

       *@*@*

       **@**

       *@*@*

       1 8

       @@****@*

       5 5

       ****@

       *@@*@

       *@**@

       @@@*@

       @@**@

       0 0

       Sample Output

       0

       1

       2

       2

//#include<bits/stdc++.h>#include<iostream>#include<string>#include<algorithm>#include<cstring>#include<cstdio>typedef long long ll;using namespace std;int m,n;char a[100][100];int jud[100][100];void dfs(int x,int y){    if(jud[x][y]==1||a[x][y]!='@')        return;    if(x<0||x>=m||y>=n||y<0)        return;    ++jud[x][y];        for(int i=-1;i<=1;++i)        {            for(int j=-1;j<=1;++j)            {                if(i!=0||j!=0)                    dfs(x+i,y+j);            }        }}int main(){    while(cin>>m>>n)    {        if(m==0&&n==0)            break;        int sum=0;        getchar();        memset(jud,0,sizeof(jud));        for(int i=0;i<m;++i)        {            for(int j=0;j<n;++j)            {                cin>>a[i][j];                if(j==n-1)                    getchar();            }        }        for(int i=0;i<m;++i)            for(int j=0;j<n;++j)                if(jud[i][j]==0&&a[i][j]=='@')                {                    ++sum;                    dfs(i,j);                }        cout<<sum<<endl;    }    return 0;}




原创粉丝点击