【算法可视化】搜索算法专题
运行平台
Algorithm Visualizer
选数
[NOIP2002 普及组] 选数
// 导入可视化库 {
const { Tracer, Array1DTracer, LogTracer, Layout, VerticalLayout } = require('algorithm-visualizer');
// }const N = 4, K = 3; //从包含4个元素的集合中选出3个数
let ans = 0 //方案数
const board =[3, 7, 12, 19]; //创建包含4个元素的一维数组
const chosen = [-1, -1, -1, -1]; //创建一维数组,初始为-1// 定义跟踪器 {
const boardTracer = new Array1DTracer('集合'); //集合,一维数组
const chosenTracer = new Array1DTracer('选中元素'); //选中元素,一维数组
const logger = new LogTracer('枚举过程');
Layout.setRoot(new VerticalLayout([boardTracer, chosenTracer, logger ]));boardTracer.set(board);
chosenTracer.set(chosen);
logger.println(`选数: 从${N}个元素中选出${K}个元素`);
Tracer.delay();
// }function validState(sum) {if(sum <= 1) return false;for (let i = 2; i <= sum / i; i ++)if(sum % i === 0) return false;return true;
}function dfs(t, last, sum) {if (t >= K) {let res = validState(sum)if(res) ans ++;// logger {logger.println(`所选${K}个数的和为${sum}`);if(res) logger.println(`${sum}是质数, 已找到${ans}组方案`);else logger.println(`${sum}不是质数`);logger.println('------------------------------------------------------------------');// }return;}for(let i = last + 1; i < N; i ++) {// visualize {logger.println(`第${t + 1}个数选择${board[i]}`);boardTracer.select(i);Tracer.delay();chosenTracer.patch(t, board[i])Tracer.delay();// }dfs(t + 1, i, sum + board[i])// visualize {boardTracer.deselect(i);Tracer.delay();chosenTracer.patch(t, -1)chosenTracer.depatch(t)Tracer.delay();// }}}// logger {
logger.println('开始执行');
// }
dfs(0, -1, 0);
// logger {
logger.println(`完成,一共有${ans}组答案`);
// }
八皇后 Checker Challenge
[USACO1.5] 八皇后 Checker Challenge
// import visualization libraries {
const { Tracer, Array2DTracer, Array1DTracer, LogTracer, Randomize, Layout, VerticalLayout } = require('algorithm-visualizer');
// }
function filledArray(length, value) {return Array(...Array(length)).map(Number.prototype.valueOf, value);
}const N = 6; //配置棋盘大小和初始状态
const board = (function createArray(N) {const result = [];for (let i = 0; i < N; i++) {result[i] = filledArray(N, 0);}return result;
}(N));
const queens = filledArray(N, -1);
const c = Randomize.Array1D({ N: N, value: () => Randomize.Integer({ min: 0, max: 0 }) }); //列状态
const u = Randomize.Array1D({ N: 2 * N, value: () => Randomize.Integer({ min: 0, max: 0 }) }); //对角线\状态
const v = Randomize.Array1D({ N: 2 * N, value: () => Randomize.Integer({ min: 0, max: 0 }) }); //对角线/状态// define tracer variables {
const boardTracer = new Array2DTracer('棋盘');
const queenTracer = new Array1DTracer('皇后所在行');
const logger = new LogTracer('算法过程');
Layout.setRoot(new VerticalLayout([boardTracer, queenTracer, logger]));boardTracer.set(board);
queenTracer.set(queens);
logger.println(`N皇后问题: ${N} X ${N}的棋盘放置 ${N} 个皇后`);
Tracer.delay();
// }let ans = 0
function dfs(x) {if (x >= N) {ans ++;// logger {logger.println(`递归到底. 所有皇后放置成功,第 ${ans} 组解为: [${queens.join(', ')}]`);logger.println('------------------------------------------------------------------');// }return;}for(let y = 0; y < N; y ++){if(c[y] === 0 && u[x + y] === 0 && v[y - x + N] === 0){// logger {logger.println(`将第 ${x} 行的皇后放到第 ${y} 列`);boardTracer.select(x, y);Tracer.delay();queenTracer.patch(x, y);Tracer.delay();// }c[y] = u[x + y] = v[y - x + N] = 1;queens[x] = y;dfs(x + 1);c[y] = u[x + y] = v[y - x + N] = 0;// logger {boardTracer.deselect(x, y);Tracer.delay();queenTracer.patch(x, -1); queenTracer.depatch(x, -1); Tracer.delay();// }}}
}// logger {
logger.println('开始执行');
// }
dfs(0);
// logger {
logger.println(`完成,一共有${ans}组解`);
// }
Lake Counting S
Lake Counting S
// import visualization libraries {
const {Tracer, Array2DTracer, LogTracer, Layout, VerticalLayout } = require('algorithm-visualizer');
// }
const n = 10, m = 12;
const G = [['W','.','.','.','.','.','.','.','.','W','W','.'],['.','W','W','W','.','.','.','.','.','W','W','W'],['.','.','.','.','W','W','.','.','.','W','W','.'],['.','.','.','.','.','.','.','.','.','W','W','.'],['.','.','.','.','.','.','.','.','.','W','.','.'],['.','.','W','.','.','.','.','.','.','W','.','.'],['.','W','.','W','.','.','.','.','.','W','W','.'],['W','.','W','.','W','.','.','.','.','.','W','.'],['.','W','.','W','.','.','.','.','.','.','W','.'],['.','.','W','.','.','.','.','.','.','.','W','.'],
];// define tracer variables {
const tracer = new Array2DTracer("Lake Counting S");
const logger = new LogTracer('广度优先搜索');
Layout.setRoot(new VerticalLayout([tracer, logger]));
tracer.set(G);
Tracer.delay();
// }const dx = [-1, -1, 0, 1, 1, 1, 0, -1];
const dy = [0, 1, 1, 1, 0, -1, -1, -1];
function bfs(x, y) {const Q = [];let node = [x, y]Q.push(node)tracer.patch(x, y, '.'); Tracer.delay();while(Q.length > 0){const node = Q.shift(); // dequeuex = node[0], y = node[1];for(let i = 0; i < 8; i ++){let a = x + dx[i], b = y + dy[i];if(a < 0 || a >= n || b < 0 || b >= m) continue;if(G[a][b] == '.') continue;G[a][b] = '.';Q.push([a, b]);// visualize {tracer.patch(a, b, '.');Tracer.delay();// }}}
}
// logger {
logger.println('开始执行');
// }
let ans = 0;
for(let i = 0; i < n; i ++)for(let j = 0; j < m; j ++)if(G[i][j] == 'W'){// logger {logger.println(`开始搜索${i}行${j}列开始的连通块`);// }ans ++;bfs(i, j);// logger {logger.println(`${i}行${j}列开始的连通块搜索结束`);// }}
// logger {
logger.println(`搜索完成,一共找到${ans}个水坑`);
// }
相关文章:
【算法可视化】搜索算法专题
运行平台 Algorithm Visualizer 选数 [NOIP2002 普及组] 选数 // 导入可视化库 { const { Tracer, Array1DTracer, LogTracer, Layout, VerticalLayout } require(algorithm-visualizer); // }const N 4, K 3; //从包含4个元素的集合中选出3个数 let ans 0 //方案数 co…...

编写dockerfile挂载卷、数据容器卷
编写dockerfile挂载卷 编写dockerfile文件 [rootwq docker-test-volume]# vim dockerfile1 [rootwq docker-test-volume]# cat dockerfile1 FROM centosVOLUME ["volume01","volume02"]CMD echo "------end------" CMD /bin/bash [rootwq dock…...

理解OAuth 2.0
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。 本文对OAuth 2.0的设计思路和运行流程,做一个简明通俗的解释,主要参考材料为RFC 6749。 一、应用场景 为了…...
8. Go实现Gin服务优雅关机与重启
文章目录 优雅关机优雅重启 无论是优雅关机还是优雅重启归根结底都是通过监听特定系统信号,然后执行一定的逻辑处理保障当前系统正在处理的请求被正常处理后再关闭当前进程。 优雅关机 优雅关机就是服务端关机命令发出后不是立即关机,而是等待当前还在…...
SQL 注入攻击 - cookie base64编码注入
环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、Base64编码介绍 原理 Base64编码的原理是将三个字节的二进制数据(共24位)转换成四个ASCII字符。由于每个ASCII字符可以表示64种状态(2^6),刚好可以用来表示24位二进制数…...

Outlook邮箱后缀如何修改?怎么添加后缀?
Outlook邮箱后缀是什么?Outlook邮箱后缀可以改吗? Outlook邮箱广泛应用于企业和个人用户之间。在使用过程中,有时我们可能会因为某些原因需要修改Outlook邮箱后缀。那么,Outlook邮箱后缀如何修改呢?下面,A…...
[LeetBook]【学习日记】图书整理 II——用两个栈实现队列
题目 图书整理 II 读者来到图书馆排队借还书,图书管理员使用两个书车来完成整理借还书的任务。书车中的书从下往上叠加存放,图书管理员每次只能拿取书车顶部的书。排队的读者会有两种操作: push(bookID):把借阅的书籍还到图书馆。…...

5G智能制造食品工厂数字孪生可视化平台,推进食品行业数字化转型
5G智能制造食品工厂数字孪生可视化平台,推进食品行业数字化转型。随着科技的飞速发展,食品工业正迎来一场前所未有的数字化转型。在这场转型中,5G智能制造工厂数字孪生可视化平台发挥着至关重要的作用。它不仅提高了生产效率,降低…...

一个系列很多样式的wordpress外贸建站模板
菌菇干货wordpress跨境电商模板 食用菌、羊肚菌、牛肝菌、香菇、干黄花菜、梅干菜、松茸wordpress跨境电商模板。 https://www.jianzhanpress.com/?p3946 餐饮调味wordpress跨境电商模板 豆制品、蛋黄糖、烘焙、咖啡、调料、调味酱、餐饮调味wordpress跨境电商模板。 http…...

Wireshark_labs TCP
在本实验中,我们将详细研究著名的TCP协议的行为。我们将通过从您的电脑向远程服务器传输一份150KB 的文件(一份Lewis Carrol 的“爱丽丝梦游仙境”文本), 并分析TCP传输内容的发送和接收过程来实现。我们将研究TCP对序列和确认号的使用,以提供…...
Linux程序崩溃调试
一、简单点的 编译时主动带-g,生成的程序带调试信息,而且开启生成dump文件,这时候可以使用core dump来调试程序,定位问题。可以参考:linux 程序crash 调试、原因分析及问题定位-CSDN博客 二、稍微复杂点 假设生成的可执…...

Day37 socket、TCP、UDP
socket类型 流式套接字(SOCK_STREAM) TCP 提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。 数据报套接字(SOCK_DGRAM) UD…...

从 Language Model 到 Chat Application:对话接口的设计与实现
作者:网隐 RTP-LLM 是阿里巴巴大模型预测团队开发的大模型推理加速引擎,作为一个高性能的大模型推理解决方案,它已被广泛应用于阿里内部。本文从对话接口的设计出发,介绍了业界常见方案,并分享了 RTP-LLM 团队在此场景…...

无人机|LQR控制算法及其无人机控制中的应用仿真
前言 LQR全称Linear Quadratic Regulator(线性二次调节器),顾名思义用于解决形如 x ˙ A x B u y C x D u \begin{aligned}\dot{x}&AxBu\\y&CxDu\end{aligned} x˙yAxBuCxDu 线性时不变系统的一种线性控制方法,…...

ubuntu环境下docker容器详细安装使用
文章目录 一、简介二、ubuntu安装docker1.删除旧版本2.安装方法一3. 安装方法二(推荐使用)4.运行Docker容器5. 配置docker加速器 三、Docker镜像操作1. 拉取镜像2. 查看本地镜像3. 删除镜像4. 镜像打标签5. Dockerfile生成镜像 四、Docker容器操作1. 获取…...

vue2源码分析-vue入口文件global-api分析
文章背景 vue项目开发过程中,首先会有一个初始化的流程,以及我们会使用到很多全局的api,如 this.$set this.$delete this.$nextTick,以及初始化方法extend,initUse, initMixin , initExtend, initAssetRegisters 等等那它们是怎么实现,让我们一起来探究下吧 源码目录 global-…...

Javascript原型 ,原型链如何理解使用 ?有什么特点?
文章目录 图解原型原型链总结有需要的请私信博主,还请麻烦给个关注,博主不定期更新,或许能够有所帮助!!请关注公众号 图解 原型 常被描述为 — 种基于原型的语言–每个对象拥有一个原型对象 当试图访问 一个对象的属性…...

Flutter混合栈管理方案对比
1.Google官方(多引擎方案) Google官方建议的方式是多引擎方案,即每次使用一个新的FlutterEngine来渲染Widget树,存在的主要问题是每个引擎都要有比较大的内存等资源消耗,虽然Flutter 2.0之后的FlutterEngineGroup通过在…...
Asp .Net Core 集成 Newtonsoft.Json
简介 Newtonsoft.Json是一个在.NET环境下开源的JSON格式序列化和反序列化的类库。它可以将.NET对象转换为JSON格式的字符串,也可以将JSON格式的字符串转换为.NET对象。这个类库在.NET开发中被广泛使用,因为它功能强大、易于使用,并且有良好的性能。 使用Newtonsoft.Json,…...
GPT对话知识库——ARM-Cortex架构分为哪几个系列?每个系列有几种工作模式?各种工作模式之间的定义和区别?每种架构不同的特点和应用需求?
目录 1,问: 1,答: 2,问: 2,答: Cortex-A系列 Cortex-R系列 Cortex-M系列 3,问: 3,答: ARM Cortex-A架构 ARM Cortex-R架构…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...