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

news2024/11/26 6:23:26

蓝桥杯-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

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

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

相关文章

乐校园二手书交易管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)大学生闲置二手书在线销售

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

0基础如何进入IT行业?

简介&#xff1a; 进入IT行业对于没有任何相关背景知识的人来说可能会具有挑战性&#xff0c;但并非不可能。以下是一些建议&#xff0c;可以帮助他们成功进入IT行业&#xff1a; 1、自学和在线资源&#xff1a;利用在线学习平台&#xff08;如Coursera、edX、Udemy等&…

分享几个可以免费使用的GPT网站吧

1. ChatGAI ChatGAI是一个界面简洁的AI平台&#xff0c;提供App和网页版&#xff0c;每日均有免费使用机会。 2. ChatGPT 本网站向大家开放了ChatGPT 3.5和4.0版本的免费体验&#xff0c;特别适合新用户。每天都有免费次数&#xff0c;响应迅速&#xff0c;注册便捷&#xff0…

【JS】打乱数组顺序,用作领域:随机播放音乐

思路 循环数组随机获取数组下标取值&#xff1a; 取当前随机下标数组取当前循环的下标数组 相互替换步骤3的数组 /*** 随机数组顺序* param {Array} arr 数组* returns Array*/ const shufArr arr > {for (let i arr.length - 1; i > 0; i--) {const j Math.floor(M…

QT网络调试助手

QT网络调试助手 1.开发流程 2.QTtcp服务器   1.1 服务端数据读取   1.2 服务端发送数据-所有客户端   1.3 服务端自动刷新ip地址   1.4 服务端检测客户端断开状态   1.5 服务端发送数据-指定特定客户端发送数据   1.6 服务端停止监听和断开 3.QTtcp客户端 1…

开源推荐榜【PaddleNLP 一款简单易用且功能强大的自然语言处理开发库】

开源地址&#xff1a;https://gitee.com/paddlepaddle/PaddleNLP.git PaddleNLP是一款简单易用且功能强大的自然语言处理开发库。聚合业界优质预训练模型并提供开箱即用的开发体验&#xff0c;覆盖NLP多场景的模型库搭配产业实践范例可满足开发者灵活定制的需求。 一键预测&am…

基于java+SpringBoot+Vue的时装购物系统的设计与实现

基于javaSpringBootVue的时装购物系统的设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis Vue工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 首页&#xff1a;展示商品信息、商品资讯、轮播图等。 商品信息&#xff1a;用户可以查看商品详情、…

基于springboot+vue+Mysql的大学生体质测试管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

AAC 格式详解

AAC 格式详解 AAC 格式详解AAC 简介AAC 编码规格频带重现&#xff08;Spectral Band Replication&#xff09;参量立体声&#xff08;Parametric Stereo&#xff09; AAC 音频文件格式ADIFADTS固定头部可变头部AAC ES总结&#xff1a;AAC sequence三层 实例&#xff1a;AAC文件…

iOS开发进阶(十三):脚手架创建iOS项目

文章目录 一、前言二、xcode-select 命令三、拓展阅读 一、前言 项目初期&#xff0c;需要搭建项目基本框架&#xff0c;为此离不开辅助工具&#xff0c;即脚手架。当然&#xff0c;IDE也可以实现新建空白项目&#xff0c;但是其新建后的项目结构可能不符合预期设计&#xff0…

基于DWT(离散小波变换)的图像加密水印算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

2个办法解决:手机照片永久删除如何恢复到相册

如今&#xff0c;我们都喜欢通过手机记录自己的生活&#xff0c;手机相册更是承载着无数珍贵的回忆。然而&#xff0c;有时我们可能会因为误操作或其他原因&#xff0c;不小心将手机中的照片永久删除。面对这种情况&#xff0c;许多人会感到着急&#xff0c;担心再也找不回那些…

就业班 第二阶段(python) 2401--4.2 day1 python初识

一、Python 语言介绍1、Python 发展历史2、Python 简介3、Python 特点4、Python 的能力二、Linux 编译安装Python31、源码安装1、安装依赖软件包2、下载3、解压安装4、配置共享库文件5、测试python36、测试 pip32、 配置使用国内源安装第三方模块1、创建配置文件补充内容四、变…

蓝桥杯 - 正则问题

解题思路&#xff1a; dfs import java.util.Scanner;public class Main {static int pos -1; // 充当charAt下标static String s;// 字符串型的静态变量public static void main(String[] args) {Scanner scanner new Scanner(System.in);s scanner.nextLine();System.ou…

外贸网站源码定制:助您实现海外市场拓展

在当今全球化的经济环境下&#xff0c;海外市场对于企业的发展变得愈发重要。而在拓展海外市场的过程中&#xff0c;一个功能强大、专业定制的外贸网站源码将成为您的致胜利器。无论是在展示产品、引导客户、还是进行在线交易&#xff0c;外贸网站源码的定制化都能够给您带来更…

2.人机交互-图形化界面的小故事

文章目录 一、图形化界面的小故事二、什么是cmd&#xff1f; 计算机在刚开始出现的时候&#xff0c;因为占地广、造价高、耗电多&#xff0c;一般都是给军队或者政府使用的&#xff0c;而并不是给个人使用的。然后随着计算机不断地发展&#xff0c;体积越来越小&#xff0c;出现…

C++ | Leetcode C++题解之第6题Z字形变换

题目&#xff1a; 题解&#xff1a; class Solution { public:string convert(string s, int numRows) {int n s.length(), r numRows;if (r 1 || r > n) {return s;}string ans;int t r * 2 - 2;for (int i 0; i < r; i) { // 枚举矩阵的行for (int j 0; j i &l…

在编程中使用中文到底该不该??

看到知乎上有个热门问题&#xff0c;为什么很多人反对中文在编程中的使用&#xff1f; 这个问题有几百万的浏览热度&#xff0c;其中排名第一的回答非常简洁&#xff0c;我深以为然&#xff1a; 在国内做开发&#xff0c;用中文写注释、写文档&#xff0c;是非常好的习惯&…

股票价格预测 | Python使用BP神经网络和LSTM神经网络预测股票价格

文章目录 效果一览文章概述代码设计BP神经网络LSTM神经网络效果一览 文章概述 BP神经网络使用

Nginx反向代理和缓存

一、Nginx反向代理 1.调度和代理的区别&#xff1a; 1.调度基于内核层面&#xff0c;代理基于应用层面 2.代理必须实现一手托两家 3.调度不需要监听任何端口&#xff0c;不需要工作任何应用程序&#xff0c;代理需要工作和上游服务器一模一样的进程 4.调度没有并发上限&am…