csp普及组算法集训--Dfs

news/2024/10/21 7:04:07/

DFS是一种经典的搜索算法也是检测有没有编程天赋的试金石

DFS:搜索与回溯

题1:自然数的拆分

//自然数的拆分 
#include<bits/stdc++.h>
using namespace std;
int n,ans[101];
void dfs(int sum,int dp){if(sum>n){return;//不可以让若干个数的和大于n }if(sum==n){for(int i=1;i<=dp-2;i++){printf("%d+",ans[i]);}printf("%d\n",ans[dp-1]);}for(int i=ans[dp-1];i<n;i++){//是组合而不是全排列 ans[dp]=i;dfs(sum+i,dp+1);}
}
int main(){scanf("%d",&n);ans[0]=1;//从1开始 dfs(0,1);	
}

迷宫问题:(洛谷)

# 迷宫

## 题目描述

给定一个 $N *M$ 方格的迷宫,迷宫里有 $T$ 处障碍,障碍处不可通过。

在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。

## 输入格式

第一行为三个正整数 $N,M,T$,分别表示迷宫的长宽和障碍总数。

第二行为四个正整数 $SX,SY,FX,FY$,$SX,SY$ 代表起点坐标,$FX,FY$ 代表终点坐标。

接下来 $T$ 行,每行两个正整数,表示障碍点的坐标。

## 输出格式

输出从起点坐标到终点坐标的方案总数。

## 样例 #1

### 样例输入 #1

```
2 2 1
1 1 2 2
1 2
```

### 样例输出 #1

```
1
```

## 提示

对于 $100\%$ 的数据,$1 \le N,M \le 5$,$1 \le T \le 10$,$1 \le SX,FX \le n$,$1 \le SY,FY \le m$。

 

code:

#include<bits/stdc++.h>
using namespace std;
int q[101][101];
int sum=0;
int i,j,n,m,t,sx,sy,x,y,ex,ey;
void dfs(int a,int b)
{if (a==ex&&b==ey){//终止条件sum++;return;}else{q[a][b]=0;if(q[a-1][b]!=0) {dfs(a-1,b);q[a-1][b]=1;}if(q[a][b-1]!=0) {dfs(a,b-1);q[a][b-1]=1;}if(q[a][b+1]!=0) {dfs(a,b+1);q[a][b+1]=1;}if(q[a+1][b]!=0) {dfs(a+1,b);q[a+1][b]=1;}}
}
int main()
{memset(q,0,sizeof(q));//边界当作障碍。cin>>n>>m>>t;cin>>sx>>sy>>ex>>ey;for(i=1;i<=n;i++)for(j=1;j<=m;j++)q[i][j]=1;//可以走for(i=1;i<=t;i++){cin>>x>>y;q[x][y]=0;//障碍物初始化}dfs(sx,sy);cout<<sum<<endl;return 0;
}

 总结:

dfs模板:

int search(int t)
{if(满足输出条件){输出解;}else{for(int i=1;i<=尝试方法数;i++)if(满足进一步搜索条件){为进一步搜索所需要的状态打上标记;search(t+1);恢复到打标记前的状态;//也就是说的{回溯一步}}}
}


http://www.ppmy.cn/news/1540727.html

相关文章

初识git · 远程操作

目录 前言&#xff1a; 理解分布式版本控制系统 远程仓库 仓库操作 克隆仓库 推送和抓取 特殊文件 取别名 标签管理 前言&#xff1a; 在基本操作&#xff0c;分支管理这几个部分&#xff0c;我们都会在本地仓库操作了&#xff0c;但是目前还没有办法将自己的代码远程…

深入了解Spring重试组件spring-retry

在我们的项目中&#xff0c;为了提高程序的健壮性&#xff0c;很多时候都需要有重试机制进行兜底&#xff0c;最多就场景就比如调用远程的服务&#xff0c;调用中间件服务等&#xff0c;因为网络是不稳定的&#xff0c;所以在进行远程调用的时候偶尔会产生超时的异常&#xff0…

Ubuntu20.04TLS 连接JBL蓝牙音响连接上却没有播放声音。

第一步&#xff0c;重启蓝牙服务 sudo systemctl restart bluetooth第二步&#xff0c;蓝牙重新连接蓝牙音响。如果已经有声音&#xff0c;那说明需要连接蓝牙的重新加载一下设备。 第三步&#xff0c;如果第二部成功了之后&#xff0c;继续下面操作&#xff0c;如果不成功&a…

已解决:ModuleNotFoundError: No module named ‘pip‘

[已解决] ModuleNotFoundError: No module named ‘pip‘ 文章目录 写在前面问题描述报错原因分析 解决思路解决办法1. 手动安装或升级 pip2. 使用 get-pip.py 脚本3. 检查环境变量配置4. 重新安装 Python 并确保添加到 PATH5. 在虚拟环境中安装 pip6. 使用 conda 安装 pip&…

STM32G4系列MCU的低功耗模式介绍

目录 概述 1 认识低功耗模式 1.1 低功耗模式的应用 1.2 低功耗模式介绍 2 低功耗模式的状态关系 2.1 低功耗模式可能的转换状态图 2.2 低功耗模式总结 3 运行模式 3.1 减慢系统时钟 3.2 外围时钟门控 3.3 低功耗运行模式&#xff08;LP运行&#xff09; 概述 本文主…

在掌控板上搭建http服务器

在掌控板上搭建http服务器 打开Arduino IDE&#xff0c;并且已经添加了ESP32的支持库。以下是创建一个基本HTTP服务器的步骤&#xff1a; 包含必要的库&#xff1a; #include <WiFi.h> #include <WebServer.h>配置WiFi&#xff1a; 替换ssid和password为你的WiFi网…

【02】RabbitMQ客户端应用开发实战

1、RabbitMQ基础编程模型 RabbitMQ提供了很多种主流编程语言的客户端支持&#xff0c;这里只分析Java语言的客户端。在上一章节提供了一个简单的RabbitMQ的客户端的实现&#xff0c;下面就以此为基础&#xff0c;了解RabbitMQ客户端开发的基础流程。 1.1 Maven依赖 amqp是一种…

设备ESD防静电监控仪助力自动化产线设备稳定运行

在现代自动化生产线中&#xff0c;设备的稳定运行至关重要。而静电放电&#xff08;ESD&#xff09;常常是导致这些问题的隐患之一。许多企业在生产管理中面临着设备接地状况不明、漏电检测困难、人工点检耗时巨大的难题。这些问题不仅影响生产效率&#xff0c;更可能造成潜在的…