cogs 1647. 油田[uva572]

Posted ioioioioioio

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cogs 1647. 油田[uva572]相关的知识,希望对你有一定的参考价值。

1647. 油田[uva572]

★  ★  ★  ★  ★   输入文件:oild.in   输出文件:oild.out   简单对比
时间限制:3 s   内存限制:256 MB

【题目描述】


有一家石油公司负责探勘察某块地底下的石油含量,这块地是矩形的,并且做了勘查的方便被切割成许多小块。然后使用仪器对每一个小块去勘查。包含有石油的小块称为一个pocket。假如两个pocket相连,那么这两个pocket属于同一个oil deposit。(所谓相连的定义与踩地雷游戏中的定义相同,请参考sample input,sample output)

你的任务就是要找出来这块地包含几个不同的oil deposit。



【输入格式】

输入包含好几组资料,每组资料的第一行有2个整数m,n。m代表这块土地的列数,n代表这块地的行数。(1 < =m,n < =100),接下来的m行就是这块地探勘查的内容。‘@‘代表这是一块含石油,‘*‘ 代表这一块不含石油。m= 0 n = 0代表输入结束。

【输出格式】

对每个组测试资料输出oil deposit的数目。

【样例输入】

1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0

【样例输出】

0
1
2
2
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
 
using namespace std;
const int N=110;
const int xd[]={0,-1,-1,-1,0,1,1,1};
const int yd[]={-1,-1,0,1,1,1,0,-1};
 
bool a[N][N];
int answer,n=1,m=1;
char c;
struct node{
    int x,y;
}now,top,nxt;
queue<node>q;
 
inline int read()
{
    int x=0;char c=getchar();
    while(c<0||c>9)c=getchar();
    while(c>=0&&c<=9)x=x*10+c-0,c=getchar();
    return x;
}
 
inline void bfs(int x,int y)
{
    now.x=x;
    now.y=y;
    q.push(now);
    while(!q.empty())
    {
        top=q.front();
        q.pop();
        for(int i=0;i<8;i++)
        {
            int xx=top.x+xd[i];
            int yy=top.y+yd[i];
            if(a[xx][yy])
                a[xx][yy]=0,
                nxt.x=xx,
                nxt.y=yy,
                q.push(nxt);
        }
    }
}
 
int main()
{
    freopen("oild.in","r",stdin);
    freopen("oild.out","w",stdout);
    while(1)
    {
        answer=0;
        n=read();
        m=read();
        if(!n&&!m)return 0;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                cin>>c;
                if(c==*)a[i][j]=0;
                else a[i][j]=1;
            }
        for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(a[i][j])
                answer++,
                a[i][j]=0,
                bfs(i,j);
        printf("%d\n",answer);
    }
    return 0;
}

 

以上是关于cogs 1647. 油田[uva572]的主要内容,如果未能解决你的问题,请参考以下文章

6-12 油田 uva572

UVa 572 油田(DFS求连通块)

6_12 油田(UVa572)<图的连通块DFS>

UVa 572 Oil Deposits(简单DFS)

油田(Oil Deposits)-用DFS求连通块

UVa 1647 - Computer Transformation