蓝桥杯-dfs搜索模板题(二)

蓝桥杯-dfs搜索模板题(二)

  • P1683 入门
  • P1596[USACO10OCT] Lake Counting S
  • 1114 棋盘 acwing
  • P1025 [NOIP2001 提高组] 数的划分
  • P1019 [NOIP2000 提高组] 单词接龙
  • 结语

P1683 入门

在这里插入图片描述
这道题没有回溯的必要,重复走也不计数。最开始的部分++要补上。

#include<bits/stdc++.h>

using namespace std;

const int N = 30;
int n, m;
char g[N][N];
bool st[N][N];
int res = 0;//走过的瓷砖数 

int dx[] = { -1,0,1,0 };
int dy[] = { 0,1,0,-1 };

void dfs(int x, int y)
{
	//	dfs(x+1,y);
	//	dfs(x,y+1);
	//	dfs(x-1;y);
	//	dfs(x,y-1);
	for (int i = 0; i < 4; i++)
	{
		int a = x + dx[i];
		int 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);
	}

}


int main()
{
	cin >> m >> n;
	for (int i = 0; i < n; i++)
	{
		scanf("%s", &g[i]);
		//		for(int j=0;j<m;j++)
		//			scanf("%c",&g[i][j]); 

	}
	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++;
	cout << res;

	return 0;
}

P1596[USACO10OCT] Lake Counting S

在这里插入图片描述
连起来的水坑只算一次

#include<bits/stdc++.h>
using namespace std;

const int N = 110;


int n, m;
char g[N][N];
bool st[N][N];
int res;

int dx[] = { 1,1,1,0,0,-1,-1,-1 };
int dy[] = { -1,0,1,-1,1,-1,0,1 };

void dfs(int x, int y)
{
    for (int i = 0; i < 8; i++)
    {
        int a = x + dx[i];
        int b = y + dy[i];

        if (a < 0 || a >= n || b < 0 || b >= m)continue;
        if (g[a][b] != 'W')continue;
        if (st[a][b])continue;

        st[a][b] = true;
        dfs(a, b);
    }
}




int main()
{
    cin >> n >> m;
    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] == 'W' && !st[i][j])
            {
                st[i][j] = true;
                dfs(i, j);
                res++;
            }


    cout << res;

    return 0;
}

1114 棋盘 acwing

在这里插入图片描述
注意搜索要逐层递推下去,这也是dfs(x + 1, cnt);的作用。
这种情况比如棋子比行数少,前面放完有可能后面就不放了

#include<bits/stdc++.h>
using namespace std;

const int N = 110;

int n, k;
char g[N][N];
bool st[N];
int res = 0;

void dfs(int x, int cnt)
{
	if (cnt == k)
	{
		
		res++;
		return;
	}

	if (x >= n)return;

	for (int i = 0; i < n; i++)
	{
		if (!st[i] && g[x][i] == '#')
		{
			st[i] = true;
			dfs(x + 1, cnt + 1);
			st[i] = false;
		}
	}
	dfs(x + 1, cnt);
}


int main()
{

	while (cin >> n >> k, n > 0 && k > 0)
	{

		for (int i = 0; i < n; i++)  scanf("%s", g[i]);
		
		res = 0;
		dfs(0, 0);

		printf("%d\n", res);
		

	}
	
	return 0;

}

P1025 [NOIP2001 提高组] 数的划分

在这里插入图片描述

#include<bits/stdc++.h>

using namespace std;

const int N = 10;

int n, k;
int arr[N];
int res = 0;

void dfs(int x, int start, int sum)
{


    if (x > k)
    {
        if (sum == n)
        {
            res++;

        }
        return;
    }


    for (int i = start; sum + i * (k - x + 1) <= n; i++)
    {
        arr[x] = i;
        dfs(x + 1, i, sum + i);
        arr[x] = 0;
    }
}


int main()
{
    cin >> n >> k;
    dfs(1, 1, 0);
    cout << res;
}

P1019 [NOIP2000 提高组] 单词接龙

在这里插入图片描述
细节较多。判断两个字符串是否能接龙,能接龙多少通过k的枚举实现。
并且重叠的部分越短越好,因为整体长度要尽可能长。

#include<bits/stdc++.h>
using namespace std;
const int N = 30;

int n;
string words[N];//存单词 
int used[N];//记录每个单词的使用次数 
int g[N][N];//g[i][j]存第i个单词能否接到第j个单词后面,重合的长度 
int res;

void dfs(string dragon, int x)
{
	res = max(res, (int)dragon.size());
	used[x]++;
	for (int i = 0; i < n; i++)
	{
		if (g[x][i] && used[i] < 2)
		{
			dfs(dragon + words[i].substr(g[x][i]), i);
		}
	}
	used[x]--;
}



int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)cin >> words[i];

	char start;
	cin >> start;

	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
		{
			string a = words[i], b = words[j];
			for (int k = 1; k < min(a.size(), b.size()); k++)
			{
				if (a.substr(a.size() - k, k) == b.substr(0, k))
				{
					g[i][j] = k;
					break;//尽可能短才可以 
				}
			}
		}
	for (int i = 0; i < n; i++)
	{
		if (words[i][0] == start)
		{
			dfs(words[i], i);//
		}
	}
	cout << res;
}

结语

整理自链接: link

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UTAustin最新提出!无相机姿态40秒重建3DGS方法

作者&#xff1a;小柠檬 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 添加微信&#xff1a;dddvision&#xff0c;备注&#xff1a;3D高斯&#xff0c;拉你入群。文末附行业细分群 详细内容请关注3DCV 3D视觉精品课程&#xff1a;…

lombok与idea版本不兼容问题解决

lombok与idea版本不兼容问题&#xff0c;可以选择更改lombok版本&#xff1b;也可以选择加配置来解决此问题 1、选择 setting->Build,Execution,Deployment->compiler 2、在 Shared build process VM options中加入如下配置&#xff0c;即可解决此问题 -Djps.track.ap.…

uniapp,文字超出几行显示省略号...,展开显示更多

效果图&#xff1a; 代码&#xff1a; <template><view class"text-container"><text class"text-content" click"showDetail">{{ text }}</text><text v-if"showMore" class"view-detail" cli…

Redis 全景图(2)---- 关于 Redis 的三“高”

前言 我们继续写第一篇文章没写完的。其实我也不想将我写的一篇 Redis 文章分成几篇中短文来写&#xff0c;但是没办法&#xff0c;我一次写个1万字&#xff0c;会限流&#xff0c;所以将就一下吧。 上篇文章我用了 Redis 的6大模块这个思路来描绘我脑子中的 Redis。其实这6大…

WPF-基础及进阶扩展合集(持续更新)

目录 一、基础 1、GridSplitter分割线 2、x:static访问资源文件 3、wpf触发器 4、添加xaml资源文件 5、Convert转换器 6、多路绑定与多路转换器 二、进阶扩展 1、HierarchicalDataTemplate 2、XmlDataProvider从外部文件获取源 3、TextBox在CellTemplate中的焦点问题…

这些策略助力打造多元化、公平和包容性招聘流程

多样性、公平和包容(DEI)是企业招聘员工的最佳策略。顾名思义&#xff0c;DEI描述了三个关键组成部分: “多元化”&#xff0c;这取决于吸引、招聘、雇佣和留住多元化的员工队伍; “公平”部分是指确保不歧视和平等就业机会; “包容”要求建立一个尊重、支持和包容的环境&am…

【学习】兼容性测试为何如此重要

兼容性测试是软件测试中非常重要的一环&#xff0c;旨在确保软件在不同的平台、浏览器、操作系统等环境下能够正常运行&#xff0c;并且不会出现兼容性问题。本文将介绍兼容性测试的概念、重要性、实施步骤及实践案例&#xff0c;帮助读者更好地理解兼容性测试在软件开发中的重…

【解决问题】排查linux手动删除文件,但是文件标记为deleted,资源未释放

背景&#xff1a; 生产环境我们把程序生成的数据文件手动删除后&#xff0c;但是空间并没有释放&#xff0c;导致硬盘被占用&#xff0c;不够用 问题排查&#xff1a; 1.查看占用文件状态 使用命令&#xff1a; lsof | grep deleted 查看 文件已经删除了&#xff0c;但是都是…

人事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)请假加班招聘考勤

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

idea编译一直失败处理

切换分支的时候&#xff0c;明明代码正常&#xff0c;但是编译的时候一直失败。。。。特别是多个项目的时候&#xff0c;经常失败。 配置 -Djps.track.ap.dependenciesfalse idea默认是增量编译&#xff0c;设置这个false之后就从头开始编译了。 设置之后&#xff0c;点击编译&…

Linux系统中安装一些常用的插件备用

Linux系统中安装一些常用的插件备用 1.安装wget yum -y install wget 2.安装vim yum -y install vim-enhanced 3.更换yum源为国内的阿里云源&#xff08;选择&#xff09; 1、备份CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.…

划重点!实物黄金和现货黄金的区别

有人说虽然现货黄金不是实物黄金&#xff0c;但却胜于实物黄金&#xff0c;我们认为如果从投资的便利性&#xff0c;以及潜的获利空间这两个主要的方面来说&#xff0c;上述的观点是相当正确的。但投资者在正式参与之前&#xff0c;最好还是认真了解一下实物黄金和现货黄金的主…

建立统一网络身份认证平台,赋能用户信息安全

“近年来&#xff0c;层出不穷的网络谣言、网络暴力事件以及网络水军、网络黑灰产犯罪屡禁不止、屡打不绝&#xff0c;其主要原因是网络实名制落实不到位。”全国人大代表、黑龙江省大庆市公安局网络警察分局副局长贾晓亮接受记者采访时表示&#xff0c;网络信息安全问题是我们…

深度学习实战74-基于Transformer的ViT模型的搭建与实际应用,ViT模型的原理介绍

大家好,我是微学AI,今天给大家介绍一下深度学习实战74-基于Transformer的ViT模型的搭建与实际应用,ViT模型的原理介绍。Vision Transformer (ViT)是一种基于Transformer架构的深度学习模型,专门用于计算机视觉任务。与传统的卷积神经网络不同,ViT将输入图像分割成固定大小…

【C++】入门知识

1. 命名空间 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称都将存在于全局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的就是对标识符的名称进行本地化&#xff0c;以避免命名冲突或名字污染&#xff0c;…

外汇110:交易中,是否真的存在确定性?

我们看问题的角度不同&#xff0c;得到的结果必然也是不一样的。我们不能否认任何一种可能性&#xff0c;但一切需要从逻辑出发。交易中&#xff0c;最大的确定性就是市场是不确定的&#xff0c;什么样的行情都可能发生。当然&#xff0c;绝对的确定性是不存在的&#xff0c;但…

制定合理的薪酬计划是激励员工的最佳方式

想要在竞争日益激烈的环境中取得成功的雇主必须有一个精心设计的薪酬计划&#xff0c;以激励员工&#xff0c;控制薪酬成本&#xff0c;并确保公平&#xff0c;最好的薪酬计划反映了雇主的文化&#xff0c;因此&#xff0c;雇主应该建立一种薪酬理念&#xff0c;福利项目也应该…

Mysql实战--为什么表数据删掉一半,表文件大小不变

经常会有同学来问我&#xff0c;我的数据库占用空间太大&#xff0c;我把一个最大的表删掉了一半的数据&#xff0c;怎么表文件的大小还是没变&#xff1f; 那么今天&#xff0c;我就和你聊聊数据库表的空间回收&#xff0c;看看如何解决这个问题。 这里&#xff0c;我们还是针…

Python字符串操作方法一览表

字符串操作 你患得患失太在意从前又太担心将来&#xff0c;有句话说的好昨天是段历史&#xff0c;明天是个谜团而今天是天赐的礼物 像珍惜礼物那样珍惜今天。—— 龟大仙《功夫熊猫3》 1.字符串连接 例子&#xff1a; str1 "Hello" str2 "World" resul…

stm32HAL库创建项目

stm32cubeMX 作用进行初始化芯片使编程者直接调用函数根据创作者的想法经行编写减少了查看芯片手册所消耗的时间 创建项目 打开软件 双击标记处选择mcu即芯片 在此处搜索芯片型号 在双击检索到的芯片 点击此处经行&#xff0c;文件位置&#xff0c;打开方式&#xff0c;项目…