HDU1241广搜

来源:互联网 发布:opencv读取caffe 编辑:程序博客网 时间:2024/04/30 20:45

题目大意:矩形格子内有油田,相邻的两个格子如果油口,那么它们是同一个油田,求一共有多少的油田。
分析:深搜,广搜都可以,广搜注意标记以避免重复访问。
(Tip:HDU上给的第四个测试数据有问题,第二个5后面多了个空格)

#include<stdio.h>#include<string.h>#define MAX 105char ma[MAX][MAX],mark[MAX][MAX],ans,row,col;int d[8][2]={0,1,1,0,0,-1,-1,0,-1,-1,1,1,-1,1,1,-1};void bfs(int x,int y){    int i,j;    mark[x][y]++;    for(i=0;i<8;i++){        if((x+d[i][0])>=0&&(y+d[i][1])>=0&&(x+d[i][0])<row&&(y+d[i][1])<col)            if(mark[x+d[i][0]][y+d[i][1]]==0&&ma[x+d[i][0]][y+d[i][1]]=='@')                mark[x+d[i][0]][y+d[i][1]]=1;    }    for(i=0;i<8;i++)        if((x+d[i][0])>=0&&(y+d[i][1])>=0&&(x+d[i][0])<row&&(y+d[i][1])<col)            if(ma[x+d[i][0]][y+d[i][1]]=='@'&&mark[x+d[i][0]][y+d[i][1]]==1)                bfs(x+d[i][0],y+d[i][1]);}int main(){//    freopen("in.txt","r",stdin);    int i,j;    while(scanf("%d%d",&row,&col)&&row){        ans=0;        for(i=0;i<row;i++){            getchar();            for(j=0;j<col;j++)                scanf("%c",&ma[i][j]);        }        memset(mark,0,sizeof(mark));        for(i=0;i<row;i++)            for(j=0;j<col;j++)                if(ma[i][j]=='@'&&mark[i][j]==0){                    ans++;mark[i][j]=1;                    bfs(i,j);                }        printf("%d\n",ans);    }    return 0;}


0 0
原创粉丝点击