YCOJ踏青C++

本文介绍了一道YCOJ的题目,内容涉及寻找召唤师峡谷地图中连通的草丛区域。玩家需要找出所有独立的草地并确定至少需要多少人才能覆盖这些草地,以确保每个草地都有人负责。解题方法是使用深度优先搜索(DFS)来统计连通的草丛块数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

踏青

Description

小白和他的朋友周末相约去召唤师峡谷踏青。他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地。草丛通过上下左右 4 个方向扩展其他草丛形成一片草地,任何一片草地中的格子都是草丛,并且所有格子之间都能通过上下左右连通。如果用’#‘代表草丛,’.'代表空地,下面的峡谷中有 2 片草地。

##…

…##

处在同一个草地的 2 个人可以相互看到,空地看不到草地里面的人。他们发现有一个朋友不见了,现在需要分头去找,每个人负责一片草地,想知道他们至少需要多少人。

Input
第一行输入 n, m (1 ≤ n,m ≤ 100) 表示峡谷大小。
接下来输入 n 行字符串表示峡谷的地形。

Output
输出至少需要多少人。
Sample Input 1

5 6
.#…
…#…
…#…#
…##.
.#…
Sample Output 1
5

——摘自YCOJ

连通块?找出上下连通的草丛,求至少要多少人,嗯~日常DFS。
找出所有连通的草块,统计数量,即为正解。
四个方向,边界处理,这道题就这样AC了:

#include<bits/stdc++.h>
using namespace std;
char s[110][110];
int n,m,sum;
int dir[4][2] = {
  
  {1,0}, {0,1}, {-1,0},{0,-1}};
int vis[110][110];//={0};
void dfs(int x,int y){
	int tx,ty;
	for(int i=0;i<4;i++){
		tx=x+dir[i][0];
		ty=y+dir[i][1];
		if(tx>=0&&tx<n&&ty>=0&&ty<m&&vis[tx][ty]==0&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值