uva --572

来源:互联网 发布:thunder mac版 编辑:程序博客网 时间:2024/06/16 17:13
//搜索--简单dfs/bfs #include<iostream>#include<cstring>#include<string>#include<cstdio> using namespace std;char map[110][110];int visited[110][110],n,m;int x[]={-1,1,0,0,-1,1,-1,1},y[]={0,0,-1,1,-1,-1,1,1};void dfs(int i,int j){    int k=0,x1,y1;    for(k=0;k<8;k++)    {        x1=i;y1=j;        x1=x1+x[k];y1=y1+y[k];        if(x1>=0&&y1>=0&&x1<m&&y1<n&&map[x1][y1]=='@'&&!visited[x1][y1])        {              visited[x1][y1]=1;              dfs(x1,y1);        }    }}typedef struct{   int x,y;}Q;void bfs(int i,int j){    Q q[1000];int front=-1,rear=-1;     int k,x1,x2,y1,y2;     q[++rear].x=i;     q[rear].y=j;     while(front!=rear)     {         x1=q[++front].x;         y1=q[front].y;         for(k=0;k<8;k++)         {             x2=x1+x[k];y2=y1+y[k];             if(x2>=0&&x2<m&&y2>=0&&y2<n&&map[x2][y2]=='@'&&!visited[x2][y2])             {                 q[++rear].x=x2;                 q[rear].y=y2;                 visited[x2][y2]=1;             }         }      }}int main(){    int k,cnt,i,j;    while(scanf("%d %d",&m,&n)!=EOF&&m)    {         cnt=0;         memset(visited,0,sizeof(visited));         for(i=0;i<m;i++)            scanf("%s",map[i]);         for(i=0;i<m;i++)            for(j=0;j<n;j++)            {                if(map[i][j]=='@'&&!visited[i][j])                {                    cnt++;                    bfs(i,j);                }            }         printf("%d\n",cnt);      } return 0; } 

0 0
原创粉丝点击