UVA-572-搜索基础题

题意

GeoSurvComp 地理调查公司负责发现石油存储,这次GeoSurvComp公司在一个大型矩形区域上工作,
它用一个网格分割地表,然后用可感知装备来单独分析每块小方格区域下是否包含石油,
有油的地块叫做pocket,如果俩个相邻的pocket,那么它们是相同石油存储的一部分,
石油存储能够非常大,可能会包含多个pocket,
你的任务是计算出在一个方格中有多少不同的石油存储.

输入
输入文件里包含一个或多个方格,每个方格由一行包含m,n俩个数字开头,
m是方格的行,n是列.
如果m=0代表输入结束,
要不然1 ≤ m ≤ 100,1 ≤ n ≤ 100
随后m行,每行有n个字符,每个字符代表一块地,*代表没有石油,@代表一个石油pocket

输出
对于每个网格,输出不同的石油存储,
俩个水平相邻,垂直相邻,对角线相邻的不同pocket是相同石油存储的一部分,
一个石油存储不会包含超过100pockets

样例输入
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0

样例输出
0
1
2
2

BUNOJ,AC时间:60ms

#include<iostream>
#include <stdio.h>
#include <memory.h>
#include<queue>
using namespace std;
#define MAXR 100
#define MAXC 100
struct Dir
{
	int r;
	int c;
} dir[8] = { { -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, 1 }, { 0, -1 }, { 1, 1 }, {
		1, 0 }, { 1, -1 } };
void bfs(queue<Dir> q, char map[][100],int used[][100], int r, int c)
{
	while (!q.empty())
	{
		Dir d = q.front();
		q.pop();
		for(int i = 0; i < 8; i++)
		{
			int nr = d.r + dir[i].r;
			int nc = d.c + dir[i].c;
			if(nr < 0 || nc < 0 || nr == r || nc == c||used[nr][nc]==1|| map[nr][nc] == ‘*‘ )
			{
				continue;
			}
			used[nr][nc]=1;
			Dir dd;
			dd.r=nr;
			dd.c=nc;
			q.push(dd);
		}
	}
}
int main()
{

	int r, c;
	while (cin >> r >> c)
	{
		if(r==0&&c==0)
			return 0;
		char map[MAXR][MAXC];
		int used[MAXR][MAXC];
		memset(used, 0, sizeof(used));
		memset(map, ‘*‘, sizeof(map));
		for(int i = 0; i < r; i++)
			for(int j = 0; j < c; j++)
			{
				cin >> map[i][j];
			}
		int total = 0;
		queue<Dir> q;
		Dir d;
		for(int i = 0; i < r; i++)
			for(int j = 0; j < c; j++)
			{
				if(used[i][j] == 0&&map[i][j]==‘@‘)
				{
					total++;
					used[i][j]=1;
					d.r=i;
					d.c=j;
					q.push(d);
					bfs( q,  map, used,  r,  c);
				}
			}
		cout<<total<<endl;
	}
	return 0;
}

  

时间: 2024-11-24 00:56:06

UVA-572-搜索基础题的相关文章

UVA 572 搜索 初识BFS DFS

题目类型: 搜索 样例输入: 1 1 * 3 5 *@*@* **@** *@*@* 1 8 @@****@* 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 0 0 样例输出: 0 1 2 2 分析: 这一题可以说是搜索中最基础的一题之一. 要找出相连在一起的有多少块, 因此, 依次枚举,遇到@时就进行搜索,用深搜,广搜都行,目的是把相连的@都标记为已访问. 下面给出用DFS(深搜)和BFS(广搜)的代码 DFS  1 :递推 #include <iostream> #i

搜索基础题

1.http://acm.hdu.edu.cn/showproblem.php?pid=1312 题意:在一个仅有红黑格子组成的矩形中,一个人只能走上下左右相邻黑色格子,问从起点开始共能走多少个格子? ’#‘:红色格子 ’.': 黑色格子: ’@‘:起点 BFS 和 DFS 都可以遍历所有走的点,每次走过一点时,计数++即可: 2.http://acm.hdu.edu.cn/showproblem.php?pid=1728 由题可知,在限制转弯数量的前提下 能够从一点走到另一个点即可:BFS 和

一些DP基础题(1)

HDU 1024  Max Sum Plus Plus Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem. Given a consecutive num

2018 Spring Single Training B (uva 572,HihoCoder 1632,POJ 2387,POJ 2236,UVA 10054,HDU 2141)

这场比赛可以说是灰常的水了,涨信心场?? 今下午义务劳动,去拿着锄头发了将近一小时呆,发现自己实在是干不了什么,就跑到实验室打比赛了~ 之前的比赛补题补了这么久连一场完整的都没补完,结果这场比完后一小时连题解都出来了··· A-烤肉拌饭 ( uva 572) 就是求联通块的数量啊,刚学dfs的时候做的那种! 1 #include <cstdio> 2 #include <algorithm> 3 #include <cstring> 4 #include <ios

面试题收集-java面试题及答案(基础题122道,代码题19道)

JAVA相关基础知识1.面向对象的特征有哪些方面?1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象.2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类).派

python每日经典算法题5(基础题)+1(中难题)

现在,越来越多的公司面试以及考验面试对算法要求都提高了一个层次,从现在,我讲每日抽出时间进行5+1算法题讲解,5是指基础题,1是指1道中等偏难.希望能够让大家熟练掌握python的语法结构已经一些高级函数的应用.这些题目是在某些刷题的网站上登记的有水平的题目.这里如果有需要input的简单题,就略去了输出结果.如果时间充裕,则就会增加每日更多习题. 一:基础算法题10道 1.判断用户输入的年份是否为闰年 题目解析: (1)问题分析:能被4整除但不能被100整除的年份为普通闰年,能被400整除的年

1、基础题

基础题: 1.表单中 get与post提交方法的区别? 答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息. 2.session与cookie的区别? 答:session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放 cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的. 两者都可通过时间来设置时间长短 3.数据

UVA - 572 - Oil Deposits (图的DFS!)

UVA - 572 Oil Deposits Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description  Oil Deposits  The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works

UVa 572 Oil Deposits(DFS)

 Oil Deposits  The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large rectangular region of land at a time, and creates a grid that divides the land into numerous square plots.

【HDU1232】畅通工程(并查集基础题)

裸敲并查集,很水一次AC 1 #include <iostream> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cstdio> 5 #include <cctype> 6 #include <cmath> 7 #include <algorithm> 8 #include <numeric> 9 #include <string> 1