首页 > 其他分享 >dfs入门习题

dfs入门习题

时间:2023-04-10 21:22:56浏览次数:32  
标签:入门 tx ty int dfs ++ && 习题

  主要记录一下个人遇见过的一些dfs的一些入门题目。

  有需要的可以跟着题单往下做。

  题单根据自己的刷题不定时更新。

 

  第一题:

  https://codeforces.com/problemset/problem/510/B

  一道比较经典的dfs模板题。需要注意一下记忆化搜索。

 

**点击查看代码 // C++**
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

const int N = 100;

bool flag;
char g[N][N];
int p[N][N];
int n, m, cnt;
int qi, qj;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};

void dfs(int x, int y, int cnt)
{	
	if (flag) return ;
	
	if (cnt >= 4 && x == qi && y == qj) {
		printf("Yes\n");
		flag = true;
		return ;
	}
	
	//记忆化搜索 , 1 代表找过 
	
	for (int i = 0; i < 4; i ++ ) {
		int tx = x + dx[i];
		int ty = y + dy[i];
		
		if (g[tx][ty] == g[x][y] && p[tx][ty] != 1 && tx >= 0 && ty >= 0 && tx < n && ty < m) {
			p[tx][ty] = 1;
			dfs(tx, ty, cnt + 1);
			p[tx][ty] = -1;
		}
	} 
	
	return ;
}


int main()
{
	cin >> n >> m;
	
	
	for (int i = 0; i < n; i ++ ) {
		for (int j = 0; j < m; j ++ ) {
			cin >> g[i][j];
		}
	}
	
	
	for (int i = 0; i < n; i ++ ) {
		for (int j = 0; j < m; j ++ ) {
			memset(p, -1, sizeof(p));
			qi = i, qj = j;
			dfs(i, j, 0);
			
		}
	}
	
	if (!flag) printf("No\n");
	
	return 0;
} 

标签:入门,tx,ty,int,dfs,++,&&,习题
From: https://www.cnblogs.com/yywuqing/p/17304354.html

相关文章

  • 天梯赛练习题 L3-004 肿瘤诊断(bfs)
    https://pintia.cn/problem-sets/994805046380707840/exam/problems/994805052626026496输入样例:3452111111111111001100110011101101000000101100000000000100011000输出样例:26LLdz[]={1,-1,0,0,0,0},dx......
  • H.264 入门篇 - 14 (去块滤波)
    目录1、产生的原因2、去块滤波的作用3、去块滤波的执行过程3.1、概念3.2、宏块去块滤波的过程3.2.1、计算边界强度3.2.2、区分真假边界4、滤波运算4.1、BS<44.2、BS=4 H264视频编码标准中,在解码器反变换量化后会出现块效应。1、产生的原因量化过程是有损的......
  • K8S入门
    原文链接:https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/9EX8Cp45一、简介为容器化应用提供集群部署和管理的开源工具,Google开发主要特性:高可用,不宕机,自动灾难恢复灰度更新,不影响业务正常运转一键回滚到历史版本方便的伸缩扩展(应用伸缩,机器加减)、提供负载均......
  • ASP.NET Core MVC 从入门到精通之接化发(二)
    随着技术的发展,ASP.NETCoreMVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NETCoreMVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NETCoreMVC系统开发的人员。 经过前两篇文章的讲解,初步了解ASP.NETCor......
  • 前端学习 node 快速入门 系列 —— 项目版权格式化
    其他章节请看:前端学习node快速入门系列项目版权格式化需求替换整个项目的版权信息,替换文件为.c和.h结尾。分析版权信息通常都在文件开头,通过是否有copyright来判断是替换版权还是新增版权实现通过node读取文件,过滤出.c、.h文件,然后用正则判断是替换版权还......
  • 小程序入门4—钉钉群机器人消息通知和钉钉工作通知
    前言在消息通知这块,钉钉可谓是玩出了花,比如工作通知、群机器人通知,还有那万恶的Ding一下。钉钉的通知不仅花样多,而且大部分渠道都支持自定义,也即可以自定义设置发送时间、发送内容,并且还支持多种样式的消息如文本、卡片、Markdown等。这篇文章我主要介绍一下常用的两类:钉钉群机......
  • ctfshow web入门 sql注入 171-175
    171-175同属无过滤绕过(并未对sql语句过滤,仅对查询结果过滤)重点:1、了解万能密码2、了解sql语句中字符串函数3、了解备份功能(导入/导出数据)4、蚁剑如何连接数据库web171$sql="selectusername,passwordfromuserwhereusername!='flag'andid=......
  • Java入门5(多态)
    多态编译时的多态:方法重载运行时的多态:动态绑定多态的三大前提类之间要有继承关系要出现方法重写父类的引用指向了子类的对象测试样例//定义Person类publicclassPerson{publicStringname;publicStringsex;publicintage;publicPerson(St......
  • 快速入门
    MPP数据库是指“大规模并行处理”(MassivelyParallelProcessing)数据库,是一种用于处理大规模数据的数据库系统。它可以处理非常大的数据集并提供快速的数据访问和处理能力。核心思想是将大型数据集分解成小的数据块,并在多个计算节点上并行处理这些块。使用共享存储架构,其中多个......
  • ST入门笔记3
    ST自动控制灯模式//之前是手动的[要求]自动模式切换5s自动[配件]m1减模式不用了只需m0m2开始停止[讲解]添加定时器(条件D0=1,tc0,50)TS定时器当前值**时间继电器一定要放在if或case语句外侧,否则就会每跑一次被清零[代码](*M0启动*)IFLDP(1,M0)THEN D0:=D0+1;END_IF;(*M2stop......