一千题,No.0018(DFS)

小艾维卡每天都会解决填字游戏。如果你还没有看到,纵横字谜从一个由R×C方块组成的网格开始,每个方块要么是空的,要么是阻塞的。玩家的任务是在垂直(自上而下)或水平(从左到右)的连续空白方块中书写单词。
伊维卡的妹妹有一个奇怪的习惯,就是看伊维卡已经解完的纵横字谜,然后从中找出字典里最小的单词。她只考虑至少两个字符长的单词。
编写一个程序,给定一个纵横字谜,找到那个单词。

输入格式:

第一行包含两个整数R和C(2≤R、C≤20) ,纵横字谜中的行数和列数。
下面的每一行都包含一个C字符字符串。这些字符中的每一个要么是英文字母表中的小写字母,要么是代表方块的字符“#”。
并且保证解决方案始终存在。

输出格式:

输出纵横字谜中按字典顺序排列的最小单词

输入样例1:

4 4
luka
o#a#
kula
i#a#

输出样例1:

kala

输入样例2:

4 4
luka
o#a#
kula
i#as

输出样例2:

as

输入样例:

4 5
adaca
da##b
abb#b
abbac

输出样例:

abb

 解题思路:

虽然题目叫DFS,但是使用DFS不易于理解,这里用模拟先模拟一下

1,将其存储至数组中

2,以从左向右为例,将纵向所有存储为string,查找#,如果不存在直接入set,

3,如果存在就用old和now两个string从#处分开string,紧接着重复2,判断old和now两个,

如果存在就入set,如果不存在就继续分割string now;

4,输出set头元素

c++代码如下:

#include <bits/stdc++.h>using namespace std;int main()
{set<string> s;int x,y;cin >> x >> y;char arrA[x][y];//cinfor(int i = 0;i < x;++i){for(int j = 0;j < y;++j){cin >> arrA[i][j];}}//从上到下string str;for(int j = 0;j < y;++j){str = "";for(int i = 0;i < x;++i){str += arrA[i][j];}if(str.find('#') == string::npos){s.insert(str);}else{while(str.find('#') != string::npos){auto t = str.find('#');string old = str.substr(0,t);str = str.substr(t+1);if(str.size() >= 2 && str.find('#') == string::npos){s.insert(str);}if(old.size() >= 2){s.insert(old);}}}}//从左到右for(int i = 0;i < x;++i){str = "";for(int j = 0;j < y;++j){str += arrA[i][j];}if(str.find('#') == string::npos){s.insert(str);}else{while(str.find('#') != string::npos){auto t = str.find('#');string old = str.substr(0,t);str = str.substr(t+1);if(str.size() >= 2 && str.find('#') == string::npos){s.insert(str);}if(old.size() >= 2){s.insert(old);}}}}//coutcout << *s.begin();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/15597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL--存储引擎

一、存储引擎介绍 1.介绍 存储引擎相当于Linux的文件系统&#xff0c;以插件的模式存在&#xff0c;是作用在表的一种属性 2.MySQL中的存储引擎类型 InnoDB、MyISAM、CSV、Memory 3.InnoDB核心特性的介绍 聚簇索引、事务、MVCC多版本并发控制、行级锁、外键、AHI、主从复制特…

VSCode CC++ 配置:

vscode配置C/C编译环境_vscode compiler path-CSDN博客 之后还有bash的配置设置

Python | Leetcode Python题解之第112题路径总和

题目&#xff1a; 题解&#xff1a; class Solution:def hasPathSum(self, root: TreeNode, sum: int) -> bool:if not root:return Falseif not root.left and not root.right:return sum root.valreturn self.hasPathSum(root.left, sum - root.val) or self.hasPathSum…

银河麒麟桌面版操作系统配置远程SSH连接

一、启动ssh服务(已安装openss服务&#xff09; sudo netstat -ntlp #查看22端口是否已启动 sudo Systemctl start ssh sudo systemctl enable ssh sudo systemctl status ssh sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 二、启动ssh服务(未安装opens…

bambustudio debian en_GB

启动出现错误&#xff0c;报…en_GB… sudo nano /etc/locale.gen 取消 en_GB.UTF-8 的注释&#xff0c;并保存 sudo locale-gen

关于在子线程中获取不到HttpServletRequest对象的问题

这篇文章主要分享一下项目里遇到的获取request对象为null的问题&#xff0c;具体是在登录的时候触发的邮箱提醒&#xff0c;获取客户端ip地址&#xff0c;然后通过ip地址定位获取定位信息&#xff0c;从而提示账号在哪里登录。 但是登录却发现获取request对象的时候报错了。 具…

学习java第八十一天

解释Spring Bean的声明周期 Spring容器 从XML 文件中读取bean的定义&#xff0c;并实例化bean。 Spring填充bean定义&#xff08;DI&#xff09;中指定的所有属性。 如果bean实现了BeanNameAware接口&#xff0c;spring会将bean的id传递给setBeanName()方法。 如果有任何BeanBe…

Docker提示某网络不存在如何解决,添加完网络之后如何删除?

Docker提示某网络不存在如何解决&#xff1f; 创建 Docker 网络 假设现在需要创建一个名为my-mysql-network的网络 docker network create my-mysql-network运行容器 创建网络之后&#xff0c;再运行 mysqld_exporter 容器。完整命令如下&#xff1a; docker run -d -p 9104…

认识K8s集群的声明式资源管理方法

前言 Kubernetes 集群的声明式资源管理方法是当今云原生领域中的核心概念之一&#xff0c;使得容器化应用程序的部署和管理变得更加高效和可靠。本文将认识了解 Kubernetes 中声明式管理的相关理念、实际应用以及优势。 目录 一、管理方法介绍 1. 概述 2. 语法格式 2.1 管…

21、设计模式之模板方法模式

模板模式 在模板模式&#xff08;Template Pattern&#xff09;中&#xff0c;一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 介绍 意图&#xff1a; 定义…

Spring Boot Interceptor(拦截器使用及原理)

之前的博客中讲解了关于 Spring AOP的思想和原理&#xff0c;而实际开发中Spring Boot对于AOP的思想的具体实现就是Spring Boot Interceptor。在 Spring Boot 应用程序开发中&#xff0c;拦截器&#xff08;Interceptor&#xff09;是一个非常有用的工具。它允许我们在 HTTP 请…

Redis可视化工具:Another Redis Desktop Manager下载安装使用

1.Github下载 github下载地址&#xff1a; Releases qishibo/AnotherRedisDesktopManager GitHub 2. 安装 直接双击exe文件进行安装 3. 连接Redis服务 先启动Redis服务&#xff0c;具体启动过程可参考&#xff1a; Windows安装并启动Redis服务端&#xff08;zip包&#xff09…

OpenGL梁友栋-Barsky算法裁剪线段

使用C语言 裁剪线段P1&#xff08;3&#xff0c;3&#xff09;&#xff0c;P2&#xff08;-2&#xff0c;-1&#xff09;,裁剪窗口为wxl0,wxr2,wyb0,wyt2。 // 梁友栋-barsky算法.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h"#include <GL/glut.h…

算法训练营day46

一、单词拆分 元素无重可复选 base case is.length return true&#xff0c;遍历到了最后, 因为ilen s.length&#xff0c;len初始值为1&#xff0c;那么i1 s.length&#xff0c;那么i s.lenth -1 也就是最后一个字符位置 dp(s,i)函数定义&#xff1a;返回 s[i…] 是否能够…

Golang | Leetcode Golang题解之第111题二叉树的最小深度

题目&#xff1a; 题解&#xff1a; func minDepth(root *TreeNode) int {if root nil {return 0}queue : []*TreeNode{}count : []int{}queue append(queue, root)count append(count, 1)for i : 0; i < len(queue); i {node : queue[i]depth : count[i]if node.Left …

FileZilla“服务器发回了不可路由的地址,使用服务器地址代替

问题&#xff1a;在宝塔创建的FTP无法使用&#xff0c;提示“服务器回应不可路由的地址。使用服务器地址代替 第一种解决办法&#xff1a;由于宝塔把FTP被动模式端口范围设置成了39000-40000&#xff0c;所以只需要把阿里云服务器上相应的端口范围开放即可。 第二种解决办法&am…

网络安全之安全协议浅谈

安全协议 安全协议概述安全协议分类IPSecIPSec安全协议IPSec架构IPSec封装模式AH协议ESP协议SET协议SET协议电子交易模型SET协议安全目标认证中心CA 安全协议概述 安全协议是信息交换安全的核心&#xff0c;它在网络不同层次上、针对不同应用&#xff0c;通过对各种密码学技术…

LiveGBS流媒体平台GB/T28181用户手册-云端录像:查看录像、列表视图、时间轴视图、下载、删除

LiveGBS流媒体平台GB/T28181用户手册-云端录像:查看录像、列表视图、时间轴视图、下载、删除 1、云端录像1.1、查看录像1.1.1、时间轴视图1.1.2、列表视图1.1.3、日期切换1.1.4、删除当天 1.2、录像计划1.2.1、录像计划列表1.2.2、编辑录像计划1.2.3、关联通道1.2.4、删除录像计…

关键字static-----java学习笔记

static关键字 在类中声明的实例方法&#xff0c;在类的外面必须先创建对象&#xff0c;才能调用。但有些方法的调用者和当前类的对象无关&#xff0c;这样的方法通常被声明为类方法&#xff0c;由于不需要创建对象就可以调用类方法&#xff0c;从而简化了方法的调用。 这里的类…