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;
}
时间: 2024-10-16 13:06:31

cogs 1647. 油田[uva572]的相关文章

6-12 油田 uva572

DFS入门题 注意输入的\n要处理! #include<bits/stdc++.h> using namespace std; char a[1000][1000]; int n,m; bool f[1000][1000]; void dfs(int x,int y,int flag) { if(x>n||y>m||x<1||y<1)return ; if(f[x][y]||a[x][y]!='@')return ; a[x][y]=flag; for(int r=-1

6_12 油田(UVa572)&lt;图的连通块DFS&gt;

有一家石油公司负责探勘某块地底下的石油含量,这块地是矩行的,并且为了探勘的方便被切割为许多小块.然后使用仪器对每个小块去探勘.含有石油的小块称为一个pocket.假如两个pocket相连,则这两个pocket属于同一个oil deposit.(所谓相连的定义与踩地雷游戏中的定义相同,请参考sample input,sample output)你的任务就是要找出这块地包含几个不同的oil deposit.Input输入包含好几组数据,每组数据的第一行有2个整数m,n.m代表这块地的列数,n代表这块

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

[本博文非博主原创,均摘自:刘汝佳<算法竞赛入门经典>(第2版) 6.4 图] [程序代码根据书中思路,非独立实现] 例题6-12 油田(Oil Deposits,UVa572) 输入一个m行n列的字符矩阵,统计字符"@"组成多少个八连块.如果两个字符"@"所在的格子相邻(横.纵或者对角线方向),就说它们属于一个八连块.例如,下图中有两个八连块. 一.分析 1.1 整体思路 图也有DFS和BFS遍历.由于DFS更容易编写,一般用DFS查找连通块:从每个&

COGS基本法初稿

COGS基本法 序言 我们COGS人民,为建立更完善的联盟,树立正义,保障网络安宁,提供公共OJ,杜绝极少数恐怖分子对我OJ的破坏行为,并使我们自己和OIER得享自由的幸福,特为COGS制定本基本法. 第一条权利机构 权利机构由老常为领导核心的第一代领导集体及COGS QQ群的元老组成,COGS的权力机构为君主立宪制,其中老常为世袭君主,议会由首相刘易铖,长老王梦迪,内阁大臣张灵犀,外交大臣张子昂.国家工程师李冬麟组成.首相.内阁大臣.外交大臣必须由河南省实验中学有着良好素质和学习水平的学生组成

Schlumberger Techlog 2013.3 Win64 油田测井解释+Schlumberger ECLIPSE 2015.1 油藏模拟中文最新版

Schlumberger Techlog 2013.3 Win64 油田测井解释+Schlumberger ECLIPSE 2015.1 油藏模拟中文最新版二维配管软件qpiping3.2+风险分析DNV Phast Risk v6.7+CAESAR II 2014 工艺配管Zeataline.PipeData.Pro.v10.0.21风险分析DNV Phast Risk v6.7-ISO 1DVDCAESAR II 2014 win32 64支持win7 win8 管道设计应力分析软件CAES

COGS——T 2739. 凯伦和咖啡

http://www.cogs.pro/cogs/problem/problem.php?pid=2739 ★★☆   输入文件:coffee.in   输出文件:coffee.out   简单对比时间限制:1 s   内存限制:512 MB [题目描述] 为了在上课时保持清醒,凯伦需要一些咖啡.咖啡爱好者凯伦想知道最佳的温度来冲煮完美的咖啡.因此,她花了一些时间阅读几本食谱,其中包括广受好评的“咖啡的艺术”. 她知道有n个食谱,其中第i个食谱建议应当在li和ri度之间冲煮以达到最佳的味道.凯伦

COGS——T 8. 备用交换机

http://www.cogs.pro/cogs/problem/problem.php?pid=8 ★★   输入文件:gd.in   输出文件:gd.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] n个城市之间有通讯网络,每个城市都有通讯交换机,直接或间接与其它城市连接.因电子设备容易损坏,需给通讯点配备备用交换机.但备用交换机数量有限,不能全部配备,只能给部分重要城市配置.于是规定:如果某个城市由于交换机损坏,不仅本城市通讯中断,还造成其它城市通讯中断,则配

COGS——C2098. Asm.Def的病毒

http://www.cogs.pro/cogs/problem/problem.php?pid=2098 ★☆   输入文件:asm_virus.in   输出文件:asm_virus.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] “这就是我们最新研制的,世界上第一种可持久化动态计算机病毒,‘创世纪’.”方教授介绍道. “哦.”主席面无表情地点点头. “‘创世纪’无法真正杀死透明计算网络,但是可以把它变成傻子.可惜透明计算网络能轻松地辨认出病毒,所以我建议……

COGS 497——奶牛派对

http://218.28.19.228/cogs/problem/problem.php?pid=497 我们发现每头牛需要走的路程即为它到x的最短路+x到它的最短路. 转化: 于是这道题变成了一道典型的单源最短路问题,只需求出每个点到x的最短路dl,以及从x到此点的最短路d2,然后去找max(dl+d2)即可. 效率分析: 使用dijsktra算法,时间复杂度为O(n^2). [我的程序] 1 type aa=array[1..1000,1..1000] of longint; 2 var