首页 > 编程语言 >挑战程序设计竞赛 2.1章习题 POJ 2386 Lake Counting

挑战程序设计竞赛 2.1章习题 POJ 2386 Lake Counting

时间:2023-10-01 23:22:18浏览次数:40  
标签:int Lake ++ newx newy POJ && gra 习题

https://vjudge.net/problem/POJ-2386

由于最近的降雨,水在农夫约翰的田地上聚集,在这片田地中,每个方块都被表示为一个 N x M(1 ≤ N ≤ 100;1 ≤ M ≤ 100)的矩形。
每个方块可以是水('W')或干地('.')。农夫约翰想弄清楚他的田地上形成了多少个池塘。
池塘是由含有水的相连方块组成的集合,其中一个方块被认为与其八个邻居方块相邻。

给定农夫约翰田地的图表,请确定他有多少个池塘。
输入:

第1行:两个由空格分隔的整数:N 和 M
第2至第 N+1 行:每行 M 个字符,表示农夫约翰田地的一行。每个字符可以是 'W' 或 '.',字符之间没有空格。 输出:
第1行:农夫约翰田地中池塘的数量。

10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

3

数据比较小 可以锻炼下BFS 和DFS

const int N = 150;
char gra[N][N];
int n, m;
int ans;

int addx[] = { 1,-1,0,0,1,-1,1,-1 };
int addy[] = { 0,0,1,-1,1,-1,-1,1 };


void dfs(int x, int y) {
	if (gra[x][y] == 'W')gra[x][y] = '.';

	for (int i = 0; i < 8; i++) {
		int newx = x + addx[i]; int newy = y + addy[i];
		if (newx >= 0 && newx < n && newy >= 0 && newy < m && gra[newx][newy] == 'W') {
			dfs(newx, newy);
		}
	}
}

void solve() {
	ans = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (gra[i][j] == 'W') {
				dfs(i, j);
				ans++;
			}
		}
	}
	cout << ans << endl;
}

void bfs(int x,int y) {
	queue<vector<int> > q;
	vector<int> t; t.push_back(x); t.push_back(y);
	q.push(t);

	while (!q.empty()) {
		int currx = q.front()[0];
		int curry = q.front()[1];
		q.pop();

		if (gra[currx][curry] == 'W')gra[currx][curry] = '.';
		else { continue; }

		for (int i = 0; i < 8; i++) {
			int newx = currx + addx[i]; int newy = curry + addy[i];
			if (newx >= 0 && newx < n && newy >= 0 && newy < m && gra[newx][newy] == 'W') {
				vector<int> t; t.push_back(newx); t.push_back(newy);
				q.push(t);
			}
		}
	}
}


void solve1() {
	ans = 0;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (gra[i][j] == 'W') {
				bfs(i, j);
				ans++;
			}
		}
	}
	cout << ans << endl;
}


int main()
{
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> gra[i][j];
		}
	}

	//solve();
	solve1();
	return 0;
}

标签:int,Lake,++,newx,newy,POJ,&&,gra,习题
From: https://www.cnblogs.com/itdef/p/17739594.html

相关文章

  • 挑战程序设计竞赛 2.1章习题 POJ 3009 Curling 2.0
    https://vjudge.net/problem/POJ-3009在MM-21星球上,今年的奥运会之后,冰壶运动开始流行起来。但规则与我们的有些不同。冰壶比赛是在一块冰板上进行的,冰板上标有方形网眼。他们只使用一块石头。游戏的目的是用最少的步数将石头从起点引向终点。图1显示了游戏棋盘的一个示例......
  • 攻防世界MISC【3-1】练习题WriteUp
    下载附件是一个没有后缀的文件,直接扔到010Editor看看观察了一下发现应该是rar压缩包,去给它加上后缀试试。加上后缀解压出来的又是一个不知道是什么的文件。直接丢到010Editor看了看发现是个流量包既然知道了是个流量包,试着给它加上pcap后缀试试看BinGo用Wireshark可以打......
  • for循环以及练习题
    循环结构for循环一种特殊的方式int[]numbers={10,20,30,4,50};for(intx:numbers){System.out.println(x);}打印三角形5行for(inti=0;i<5;i++){for(intj=0;j<5-i;j++){System.out.print("");//第一行打五个空格第二行四个。......
  • 函数(函数的分类及声明和定义,练习题,作用域和生命周期的介绍,static和extern的详细介绍)
    1.函数的概念是一个完成某项任务的一小段代码,包括库函数和自定义函数1.1库函数库函数相关头文件点击查看库函数需要包含头文件1.2自定义函数函数的语法形式形参只有在函数在被调用的过程中为了存放实参传递过来的值,才向内存申请空间,这个过程叫形参的实例化VS中调试时F10,当进入形......
  • 攻防世界MISC练习题[中等] QR1
    下载附件得到一张空白的图片直接打开放大后发现有很多黑点,观察其的分布位置看起来像是二维码因为全是小黑点的分布也不能直接扫描出来,拿去KALI看一下。虚拟鸡启动!binwalk没内容zstegnothing。现在想起来题目是QR,在想会不会是和二维码有关,决定再去看看图片。放大图片后......
  • 【POJ 3253】Fence Repair 题解(贪心算法+优先队列+哈夫曼树)
    农夫约翰想修理牧场周围的一小段围栏。他测量了围栏,发现他需要N(1≤N≤20000)块木板,每块木板都有一定的整数长度Li(1≤Li≤50000)单位。然后,他购买了一块长度刚好足以锯入N块木板的长木板(即,其长度为Li长度的总和)。FJ忽略了“切口”,即锯切时锯屑损失的额外长度;你也应该忽略它。FJ伤心地......
  • 力扣练习题
    1#include<bits/stdc++.h>2#defineMAXSIZE1003usingnamespacestd;4typedefstruct{5char*base;6char*top;7intstactsize;8}sqstack;9voidinitstack(sqstack&s){10s.base=newchar[MAXSIZE];11if(!s.ba......
  • 顺序结构习题
    2064:【例2.1】交换值2064:【例2.1】交换值时间限制:1000ms内存限制:65536KB提交数:116964通过数:63957【题目描述】输入两个正整数a和b,试交换a、b的值(使a的值等于b,b的值等于a)。【输入】输入两个正整数a和b。【输出】输出a与b交换值后的结果。【......
  • 【POJ 1521】Entropy 题解(贪心算法+优先队列+哈夫曼树)
    熵编码器是一种数据编码方法,通过对删除了“浪费”或“额外”信息的消息进行编码来实现无损数据压缩。换句话说,熵编码去除了最初不需要的信息,以准确编码消息。高度的熵意味着一条消息包含大量浪费的信息;以ASCII编码的英文文本是具有极高熵的消息类型的示例。已经压缩的消息,如JPEG图......
  • 9.21日数据结构练习题
    用栈操作去判断一个字符串是不是回文数列1#include<iostream>2#defineMAXSIZE1003usingnamespacestd;4//定义一个栈的结构体5//包含顶指针,尾指针,长度6typedefstruct{7char*base;8char*top;9intstacksize;10}SqStack;11//创......