【算法可视化】搜索算法专题

文章展示了如何利用AlgorithmVisualizer库在JavaScript中实现选数问题、八皇后问题和湖计数问题的可视化递归解决方案,通过追踪数组和状态变化来演示算法执行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行平台

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]}`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少儿编程乔老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值