uva/6-12 572

来源:互联网 发布:苹果电脑网络不可用 编辑:程序博客网 时间:2024/06/05 03:47

油田

两个相邻则说明属于一个油田 则数目加加,又是一个递归,并不难


#include<cstdio>#include<cstring>const int maxn=1000+5;char tu[maxn][maxn];  //输入图的数组int m,n,idx[maxn][maxn]; //标记数组void dfs(int r,int c,int id){    if(r<0||r>=m||c<0||c>=n)//去除出界的        return;    if(idx[r][c]>0||tu[r][c]!='@')//已经被标记 或者不是油田        return;    idx[r][c]=id;//将id存入    for(int dr=-1; dr<=1; dr++)            for(int dc=-1; dc<=1; dc++)   // 寻找周围八块            if(dr!=0||dc!=0)  //不包括它自己                dfs(r+dr,c+dc,id); //递归}int main(){    int i,j;    while(scanf("%d%d",&m,&n)==2&&m&&n)    {        for(i =0; i<m; i++)            scanf("%s",tu[i]);        memset(idx,0,sizeof(idx));        int q=0;        for(i=0; i<m; i++)            for(j=0; j<n; j++)                if(idx[i][j]==0&&tu[i][j]=='@')                    dfs(i,j,++q);        printf("%d\n",q);    }    return 0;}

0 0
原创粉丝点击