首页 > 其他分享 >洛谷 P1683 入门

洛谷 P1683 入门

时间:2024-12-01 19:44:54浏览次数:8  
标签:P1683 洛谷 入门 块砖 int ++ st 瓷砖 走过

入门

题目描述

不是任何人都可以进入桃花岛的,黄药师最讨厌像郭靖一样呆头呆脑的人。所以,他在桃花岛的唯一入口处修了一条小路,这条小路全部用正方形瓷砖铺设而成。有的瓷砖可以踩,我们认为是安全的,而有的瓷砖一踩上去就会有喷出要命的毒气,那你就死翘翘了,我们认为是不安全的。你只能从一块安全的瓷砖上走到与他相邻的四块瓷砖中的任何一个上,但它也必须是安全的才行。

由于你是黄蓉的朋友,她事先告诉你哪些砖是安全的、哪些砖是不安全的,并且她会指引你飞到第一块砖上(第一块砖可能在任意安全位置),现在她告诉你进入桃花岛的秘密就是:如果你能走过最多的瓷砖并且没有死,那么桃花岛的大门就会自动打开了,你就可以从当前位置直接飞进大门了。

注意:瓷砖可以重复走过,但不能重复计数

输入格式

第一行两个正整数 $W$ 和 $H$,分别表示小路的宽度和长度。

以下 $H$ 行为一个 $H\times W$ 的字符矩阵。每一个字符代表一块瓷砖。其中,. 代表安全的砖,# 代表不安全的砖,@ 代表第一块砖。

输出格式

输出一行,只包括一个数,即你从第一块砖开始所能安全走过的最多的砖块个数(包括第一块砖)。

样例 #1

样例输入 #1

11 9
.#.........
.#.#######.
.#.#.....#.
.#.#.###.#.
.#.#..@#.#.
.#.#####.#.
.#.......#.
.#########.
...........

样例输出 #1

59

提示

数据规模与约定

对于全部的测试点,保证 $1 \leq W,H\le 20$。

思路:
通过深度优先搜索(DFS)算法来遍历给定二维字符数组(模拟地图场景)中特定区域的功能。具体来说,它从给定的起点(标记为@)开始,在地图上只能沿着.字符所代表的路径进行遍历,统计能够到达的.字符的数量,最后输出包括起点在内能够到达的总位置数量。

代码展示:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n, m;
const int N = 30;
char g[N][N];
int dx[] = { -1,0,1,0 };//上右下左
int dy[] = { 0,1,0,-1 };
bool st[N][N];//存每块瓷砖走没走过
int res = 0;//记录走过的瓷砖数
//当前访问到坐标(x,y)
void dfs(int x,int y)
{
	for (int i = 0; i < 4; i++)
	{
		int a = x + dx[i], b = y + dy[i];
		if (a < 0 || a >= n || b < 0 || b >= m) continue;//出界,不能走
		if (g[a][b] != '.') continue;//不是‘.’不能走
		if (st[a][b]) continue;//如果走过就不走了
		st[a][b] = true;
		res++;
		dfs(a, b);
		//st[a][b]=false为什么不回溯呢?前一个点能走,保证上一个点走过
//注意:瓷砖可以重复走过,但不能重复计数。
	}
}
int main()
{
	scanf("%d%d", &m, &n);//注意这里先取m列,再取n行
	for (int i = 0; i < n; i++)
	{
		scanf("%s", g[i]);//每行输入,不用加&
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (g[i][j] == '@')
			{
				st[i][j] = true;
				dfs(i, j);
			}
		}
	}
	res++;//加上起点
	printf("%d", res);
	return 0;
}

标签:P1683,洛谷,入门,块砖,int,++,st,瓷砖,走过
From: https://www.cnblogs.com/xuzhenxuexi/p/18580223

相关文章

  • 网络基础知识:交换机和路由器的工作原理,零基础入门到精通,收藏这一篇就够了
    交换机和路由器是网络核心设备,分别工作在数据链路层(第2层)和网络层(第3层)。交换机通过MAC地址学习和转发数据帧,支持VLAN划分广播域;路由器使用IP地址和路由表选择最佳路径转发数据包。交换机适用于局域网内高速转发,路由器连接不同网络。交换机和路由器是网络中的关键设备,分别......
  • PTA分寝室 C语言入门基础解法
     题目描述分寝室作者 陈越单位 浙江大学学校新建了宿舍楼,共有n间寝室。等待分配的学生中,有女生n0​位、男生n1​位。所有待分配的学生都必须分到一间寝室。所有的寝室都要分出去,最后不能有寝室留空。现请你写程序完成寝室的自动分配。分配规则如下:男女生不能混......
  • 计算机行业应届生到底怎么找工作?零基础入门到精通,收藏这一篇就够了!
    计算机专业毕业≠失业丹鱼教育•求职攻略很多互联网行业的同学都经常发出一个灵魂拷问:学习计算机是不是毕业就失业?随着数字化、智能化、AI时代的到来,计算机行业正以前所未有的速度和规模扩张。对于站在人生新起点上的计算机专业应届生而言,如何在竞争激烈的就业市场中脱......
  • 第9天:基础入门-反弹Shell&渗透命令&Reverse反向&Bind正向&利用语言&文件下载&多姿势
    #知识点:1、反弹Shell-项目&命令&语言等2、系统渗透命令-网络&文件&操作等一、反弹Shell的前提条件:已知存在漏洞利用或执行命令的地方,怎么去已知,则需用到第8天的判断方式,进行判断是否存在命令执行的地方,在这个前提下,再去执行shell反弹;二、为什么要反弹Shell?往......
  • 【3DMax入门教程】打造梦幻小屋——快速上手基础模型制作
    大家好,今天我要跟大家分享的是如何使用Autodesk3DMax这款强大的建模软件,创建一个基本的住宅模型。如果你是初学者或是对家居设计感兴趣的朋友,跟着这个步骤就能轻松走进3D世界。首先,打开3DMax,我们选择“Create”菜单中的“Primitives”,然后选择“Box”来生成房子的基础框架......
  • 洛谷P11361 [NOIP2024] 编辑字符串
    ProblemSolve首先任意更换相邻元素任意次等同于在可交换范围内随便移动这题是求最优解,直观想到DP和贪心,但是容易反应过来本题DP的话很难做到无后效性,且状态较多,故尝试贪心不难发现,我们从左往右遍历的某个时刻进行交换后所得到的局部最优解总是答案的一种方案的一部分原因......
  • 洛谷P1880 [NOI1995] 石子合并 题解
    此题解以纪念我终于差不多大概搞懂区间dp了(插个存档点,到时候忘了再回来看看)。P1880[NOI1995]石子合并题解在做这道题之前,可以看看P1775石子合并(弱化版)(一道题解帮你搞定两道题,多划算)。P1775石子合并(弱化版)形式化的题面一堆石头摆在你面前,让你把他们扔到一起,每次扔......
  • 20241201每日一题洛谷P1683
    普及-每日一题洛谷P1683题目描述不是任何人都可以进入桃花岛的,黄药师最讨厌像郭靖一样呆头呆脑的人。所以,他在桃花岛的唯一入口处修了一条小路,这条小路全部用正方形瓷砖铺设而成。有的瓷砖可以踩,我们认为是安全的,而有的瓷砖一踩上去就会有喷出要命的毒气,那你就死翘翘了,我们认为......
  • 洛谷 P1036 [NOIP2002 普及组] 选数 C语言
    题目:https://www.luogu.com.cn/problem/P1036题目描述已知 nn 个整数 x1,x2,⋯ ,xn,以及 1 个整数 k(k<n)。从 n 个整数中任选 k 个整数相加,可分别得到一系列的和。例如当 n=4,k=3,4 个整数分别为 3,7,12,19时,可得全部的组合与它们的和为:3+7+12=223+7+19=297+12......
  • C++vector入门教程&函数执行细节(简单明了)
    目录一·vector介绍:二·vector的特征(优缺点)优点缺点三·vector的常用成员函数1·迭代器 2·容器 resizereserve 3·元素访问operator[]&at4·元素修改inserterase一·vector介绍:在学习vector之前需要明白一点vector底层是一个以数组实现的顺......