近期写的dfs,bfs题目(比较基础的)

news/2024/11/29 8:02:38/

题一:离开中山路 - 洛谷

这道题就是bfs模板题,走迷宫,求两个点之间的最短距离

#include <iostream>
#include <queue>using namespace std;typedef pair<int, int> PII;
const int N = 1010;
int n;
char g[N][N];
int x1, y1, x2, y2;
int vis[N][N];
queue<PII> q;void bfs()
{q.push({x1 - 1, y1 - 1});int x[] = {-1, 1, 0, 0}, y[] = {0, 0, -1, 1};while(q.size()){auto t = q.front();q.pop();for(int i = 0; i < 4; i ++ ){int a = t.first + x[i], b = t.second + y[i];if(a < 0 || a >= n || b < 0 || b >= n) continue;if(g[a][b] == '1') continue;if(vis[a][b]) continue;vis[a][b] = vis[t.first][t.second] + 1;q.push({a, b});}}}int main()
{cin >> n;for(int i = 0; i < n; i ++ )cin >> g[i];cin >> x1 >> y1 >> x2 >> y2;bfs();cout << vis[x2 - 1][y2 - 1];return 0;
}

题二:马的遍历 - 洛谷

也是差不多,更简单一些,只不过这里马走八方

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;typedef pair<int, int> PII;
const int N = 1010;
int n, m, x, y;
char g[N][N];
int x1, y1, x2, y2;
int vis[N][N];
queue<PII> q;void bfs()
{memset(vis, -1, sizeof vis);q.push({x, y});vis[x][y] = 0;// 马走日int x[] = {2, 2, 1, 1, -1, -1, -2, -2}, y[] = {1, -1, 2, -2, 2, -2, 1, -1};while(q.size()){auto t = q.front();q.pop();for(int i = 0; i < 8; i ++ ){int a = t.first + x[i], b = t.second + y[i];if(a < 1 || a > n || b < 1 || b > m) continue;if(vis[a][b] != -1) continue;vis[a][b] = vis[t.first][t.second] + 1;q.push({a, b});}}}int main()
{cin >> n >> m >> x >> y;bfs();for(int i = 1; i <= n; i ++ ){for(int j = 1; j <= m; j ++ ){cout << vis[i][j] << "    "; }cout << endl;}return 0;
}

题三:血色先锋队 - 洛谷

这道题和上边有所不同的就是,起点不止一个,在一开始都放进队列就好了

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>using namespace std;typedef pair<int, int> PII;
const int N = 510;
int n, m, a, b;
int g[N][N];
vector<PII> res, start;
queue<PII> q;void bfs()
{for(int i = 0; i < start.size(); i ++ ){// cout << start[i].first << ' ' << start[i].second << endl;q.push({start[i].first, start[i].second});g[start[i].first][start[i].second] = 0;}int dx[] = {-1, 1, 0, 0}, dy[] = {0, 0, -1, 1};while(q.size()){auto t = q.front();q.pop();for(int i = 0; i < 4; i ++ ){int t1 = t.first + dx[i], t2 = t.second + dy[i];if(t1 < 1 || t1 > n || t2 < 1 || t2 > m) continue;if(g[t1][t2] != -1) continue;g[t1][t2] = g[t.first][t.second] + 1;q.push({t1, t2});}}
}int main()
{cin >> n >> m >> a >> b;for(int i = 1; i <= n; i ++ ){memset(g[i], -1, sizeof g[i]);}for(int i = 0; i < a; i ++ ){int x, y;cin >> x >> y;start.push_back({x, y});}for(int i = 0; i < b; i ++ ){int x, y;cin >> x >> y;res.push_back({x, y});}bfs();// for(int i = 1; i <= n; i ++ )// {//     for(int j = 1; j <= m; j ++ )//         cout << g[i][j] << ' ';//     cout << endl;// }for(int i = 0; i < b; i ++ ){cout << g[res[i].first][res[i].second] << endl;}return 0;
}


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

相关文章

三相并网整流控制器调试步骤

文章目录 一、 三相并网整流控制器调试步骤二、调试步骤1.精确采样----提高采样的时效性,减小相位误差。1.1 软件可通过使用DMA方式来实现:精确的交流采样控制,采样的延时会导致系统锁相后出现稳定的相位差,导致出现较大的直流分量,从而在并网控制时出现很大的恒定的无功电…

android studio 的 adb配置

首先在 Android Studio 中 打开 File -> Settings: 下载 “Google USB Driver” 这个插件 (真机调试的时候要用到), 并且记一下上面的SDK路径: 右键桌面上的 “我的电脑”, 点击 “高级系统设置”, 配置计算机的高级属性, 有两步: 添加一个新的环境变量 ANDROID_HOME, 变量…

Python+Requests+Pytest+Excel+Allure 接口自动化测试项目实战【框架之间的对比】

--------UnitTest框架和PyTest框架的简单认识对比与项目实战-------- 定义&#xff1a; Unittest是Python标准库中自带的单元测试框架&#xff0c;Unittest有时候也被称为PyUnit&#xff0c;就像JUnit是Java语言的标准单元测试框架一样&#xff0c;Unittest则是Python语言的标…

java之SpringBoot基础篇、前后端项目、MyBatisPlus、MySQL、vue、elementUi

文章目录 前言JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作&#xff08;一&#xff09;JC-1-2.SpringBoot入门程序制作&#xff08;二&#xff09;JC-1-3.SpringBoot入门程序制作&#xff08;三&#xff09;JC-1-4.SpringBoot入门程序制作&#xff08;四&#xff09;…

【Linux】文件缓冲区

目录 一、缓冲区图解二、自定义实现文件操作函数三、强制刷新内核缓冲区&#xff08;fsync&#xff09; 提到文件缓冲区这个概念我们好像并不陌生&#xff0c;但是我们对于这个概念好像又是模糊的存在脑海中&#xff0c;之间我们在介绍c语言文件操作已经简单的提过这个概念&…

15 验证差分时钟输入转单端

供给FPGA的时钟有单端时钟&#xff0c;也有差分时钟&#xff0c;当输入是差分时钟时&#xff0c;需要将差分时钟转换为单端时钟输出来作为FPGA的系统工作时钟。 本次使用锁相环来实现差分到单端时钟的转换。 FPGA代码实现如下&#xff1a; TOP层 timescale 1ns / 1ps // // …

window 常用基础命令

0、起步 0-1) 获取命令的参数指引 netstat /? 0-2) 关于两个斜杠&#xff1a; window 文件路径中使用反斜杠&#xff1a;\ linux 文件路径中使用&#xff1a;/ 1、开关机类指令 shutdown /s # 关机shutdown /r # 重启shutdown /l …

目标检测YOLO算法,先从yolov1开始

学习资源 有一套配套的学习资料&#xff0c;才能让我们的学习事半功倍。 yolov1论文原址&#xff1a;You Only Look Once: Unified, Real-Time Object Detection 代码地址&#xff1a;darknet: Convolutional Neural Networks (github.com) 深度学习经典检测方法 one-stag…