js解二维迷宫

迷宫问题(回溯、栈) 描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。入口点为[0,0],既第一格是可以走的路。 本题含有多组数据。 数据范围: 2<= n,m <=10, 输入的内容 阅读详情

今天无聊,自己写了一个解二维迷宫的js类,请指教。

/* 功能:解二维迷宫
 * 制作:Vilien
 * 日期:2013.10.25
 *
 * @usage new Maze(maze, x, y, epx, epy)
 *
 * @param maze
 * > 二维迷宫,必须,类型为二维数组
 * > 0表示可通过,1表示不可通过
 *
 * @param x
 * > 迷宫起点横坐标,可选,缺省为0,从左顶点计算起
 *
 * @param y
 * > 迷宫起点纵坐标,可选,缺省为0,从左顶点计算起
 *
 * @param epx
 * > 迷宫终点横坐标,可选,缺省为最大横坐标,从左顶点计算起
 *
 * @param epy
 * > 迷宫终点纵坐标,可选,缺省为最大纵坐标,从左顶点计算起
 *
 * @eg
 * > var maze = [
 * >    [ 0, 0, 0, 0, 1, 0, 0, 0 ],
 * >    [ 0, 1, 1, 1, 1, 0, 1, 0 ],
 * >    [ 0, 0, 0, 0, 1, 0, 1, 0 ],
 * >    [ 0, 1, 0, 0, 0, 0, 1, 0 ],
 * >    [ 0, 1, 0, 1, 1, 0, 1, 0 ],
 * >    [ 0, 1, 0, 0, 1, 0, 1, 0 ],
 * >    [ 0, 1, 0, 0, 1, 0, 0, 0 ],
 * >    [ 0, 1, 1, 1, 1, 1, 1, 0 ]
 * > ];
 * > var m = new Maze(maze, 0, 0, 7, 7);
 * > m.echo();
 */
function Maze(maze, x, y, epx, epy) {
    this.ways = []; // 总线路
    this.bestWay = []; // 最优线路
    this.badWay = []; // 最差线路
    this.length = 0; // 解集数

    var x = x || 0,
        y = y || 0,
        epx = epx || maze[maze.length-1].length-1,
        epy = epy || maze.length-1,
        dx = [-1, 1, 0, 0], // 左右
        dy = [0, 0, 1, -1], // 下上
        m = clone(maze),
        _self = this;

    // run
    (function(x, y){
        var nx, ny;
        m[y][x] = '*';  // 到此一游
        for (var i=0; i<4; i++) {
            nx = x + dx[i];
            ny = y + dy[i];
            if (ny>=0 && ny<m.length && nx>=0 && nx<m[ny].length && m[ny][nx]===0) {
                if (nx===epx && ny===epy) {
                    _self.ways.push(clone(m));
                } else {
                    arguments.callee(nx, ny);
                }
            }
        }
        m[y][x] = 0; // 此路不通,请绕路
    })(x, y);

    // 结果处理
    this.length = this.ways.length;
    this.bestWay.step = Number.MAX_VALUE;
    this.badWay.step = 0;
    for (var i=0; i<this.length; i++) {
        this.ways[i].step = this.ways[i].join(',').replace(/,|1|0/g,'').length;
        this.ways[i][epy][epx] = '*'; // 终点标记
        this.bestWay.step > this.ways[i].step ? this.bestWay = this.ways[i] : 0;
        this.badWay.step < this.ways[i].step ? this.badWay = this.ways[i] : 0;
    }

    // 拷贝maze
    function clone(maze) {
        var a = [];
        for (var i=0; i<maze.length; i++) {
            a[i] = maze[i].slice();
        }
        return a;
    }
}

// 输出方法,需浏览器console支持,删除该方法不影响本迷宫类
Maze.prototype.echo = function(sch){
    switch(sch) {
    case 1: // 全部解法
        var w = this.ways;
        for (var i=0; i<w.length; i++) {
            console.log('The way ' + i + ' , step:'+w[i].step);
            console.log(w[i].join('\n').replace(/,/g, ' '));
        }
        break;
    case 2: // 最差解法
            console.log('The bad way, step:'+this.badWay.step);
            console.log(this.badWay.join('\n').replace(/,/g, ' '));
        break;
    default: //最优解法
            console.log('The best way, step:'+this.bestWay.step);
            console.log(this.bestWay.join('\n').replace(/,/g, ' '));
    }
};
使用方法:

var maze = [   
        [ 0, 0, 0, 0, 1, 0, 0, 0 ],   
        [ 0, 1, 1, 1, 1, 0, 1, 0 ],    
        [ 0, 0, 0, 0, 1, 0, 1, 0 ],   
        [ 0, 1, 0, 0, 0, 0, 1, 0 ],    
        [ 0, 1, 0, 1, 1, 0, 1, 0 ],   
        [ 0, 1, 0, 0, 1, 0, 1, 0 ],    
        [ 0, 1, 0, 0, 1, 0, 0, 0 ],   
        [ 0, 1, 1, 1, 1, 1, 1, 0 ]
    ];   

var m = new Maze(maze, 0, 0, 7, 7);
m.echo(1);
结果:

JavaScript完成迷宫的自动生成与自动求解 语言:JavaScript 简书:https://www.jianshu.com/u/489662a091fd GitHub:https://github.com/webxing 迷宫生成 戳我去GitHub看详细代码以及生成动画&amp;amp;amp;gt;&amp;amp;amp;gt;&amp;amp;amp;gt;&amp;amp;amp;gt;迷宫生成 下文所涉及的迷宫为: 只有一个出口,一个入口 解有且只有一个 方形画布,行与列均为奇数 墙与路径均占一个格子 阅读详情

相关推荐

华为OD机试C卷-- 迷宫问题(Java & JS & Python)

定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。入口点为[0,0],既第一格是可以走的路。 数据范围: 2≤n,m≤10 , 输入的内容只包含 0≤val≤1。

wbajsjhhhhh的博客 4187

使用Js实现的迷宫游戏

使用HTML+CSS+JS+HTML实现npc追逐迷宫游戏的实现

qq_56337139的博客 2409

【华为OD】| 迷宫问题_深度优先搜索 DFS

本题可以使用深度优先搜索,从起点开始,将其计入 path 路径中,接着将起点从"0"改为"2",表示走过该点了,然后继续 dis 其上,下,左,右四个方向的点,直到 dfs 到的点是终点,即(n-1,m-1),此时可以 return path.它表示一迷宫,其中的 1 表示墙壁,0 表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线入口点为[0,0],既第一格是可以走的路。再输入相应的数组,其中的 1 表示墙壁,0 表示可以走的路。一道很简单的深度优先搜索题。

buff会技术的程序媛de博客 276

javascript迷宫_Blockly Game之迷宫

游戏介绍迷宫游戏总共有10个关卡,随着关卡等级的提高,积木会变多,难度也有相应的增加。游戏目的:了解方向积木、循环积木、以及判断积木的使用;游戏等级:1-10级;运行程序:单机可以执行积木脚本,积木脚本将控制企鹅运动,直到脚本执行完成或找到地图图标标志;方向积木:向左转、向右转;循环积木:重复执行直到,for或while循环;判断积木:如果前方可以通行,if or ifelse;分析实现积木定义旋...

weixin_39676034的博客 1353

【华为机试真题JavaScript】迷宫问题

定义一个二维数组 N*M ,如 5 × 5 数组下所示:};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。入口点为[0,0],既第一格是可以走的路。数据范围:2≤n,m≤10 , 输入的内容只包含 0≤val≤1。

545

JavaScript迷宫游戏项目实战

在JavaScript中,事件是Web开发的核心组成部分,它们是用户或者浏览器自身执行的某些动作的信号。事件可以被分为几类:用户界面事件:这些事件与用户交互有关,如点击、鼠标移动、键盘输入等。浏览器事件:与浏览器窗口或标签的生命周期相关的事件,例如加载、卸载、错误、窗口大小调整等。表单事件:与表单元素相关的事件,如输入、提交、更改等。文档事件:文档对象模型中的事件,如滚动、滚动条移动、焦点变化等。媒体事件。

weixin_30633869的博客 1129

基于JS的迷宫小游戏

点击这几个上下左右 || 直接键盘上的上下左右 CSS JS 玩的开心!

老电影故事的博客 980

JavaScript迷宫生成与解决的算法实践

要开始使用JavaScript,首先需要设置一个合适的开发环境。对于Web开发,常用的文本编辑器如Visual Studio Code,Sublime Text或Atom都提供了丰富的插件支持和便捷的编码体验。安装Node.js后,可以使用npm(Node包管理器)来管理项目依赖,并用Webpack或Babel等工具进行模块打包和语法转换。

weixin_42509507的博客 1000

JS实现“老鼠走迷宫”算法

问题描述 给定一个二维数组,数组中2表示墙壁,0表示通路,由此数组可展示为一个迷宫图。给定入口位置和出口位置,判断之间是否存在通路并显示出走出迷宫的道路。 思路 实际上是使用回溯算法求解该问题,就是在上下左右四个方向试探,倘若有路则走一步,在新的位置继续在四个位置试探,并且对走过的路进行标记,倘若走到死胡同里,则退回上一步再来试探,以此类推,使用递归来实现。 JS代码 //递归实现老鼠走迷宫算法 ...

qq_40511157的博客 2159

mazegen:掌握JavaScript实现的随机迷宫生成

迷宫生成器是现代计算机科学与游戏设计中的一个有趣应用,它将算法应用于迷宫的自动创造过程中。迷宫的生成不仅仅是为了游戏娱乐,它在算法测试、路径规划等多个领域都有着重要的应用。迷宫的历史可以追溯到古希腊时期,最早的迷宫是神话中的人造迷宫,例如克里特岛的米诺陶洛斯迷宫。这些迷宫都是用于特定目的的建筑结构,比如囚禁或宗教仪式。随着时代的发展,迷宫逐渐演变成了人们娱乐与挑战自我的方式,到了计算机时代,迷宫更是成为了一个测试算法性能的平台。

weixin_34064233的博客 1045

简易的迷宫算法

简易的迷宫算法 js实现简单的迷宫模版生成

JS实现迷宫小游戏(完整代码)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>JS打造的走迷宫游戏</title> </head&gt...

m0_45293861的博客 2431

F5 Shape逆向工程实战:从美西南航空到xbk的风控突破

本文以美西南航空和xbk为例,深入剖析了F5 Shape风控系统的逆向工程实战。文章拆解了其核心防线,包括通信加密、JSVMP逆向分析和无孔不入的环境指纹检测,并分享了定位Header生成入口、模拟算法输出及构建真实浏览器环境的系统性方法与思路,为合规的技术研究与测试提供参考。

weixin_29327525的博客 1389

js迷宫生成与迷宫求解算法

js经典算法,迷宫的生成和自动求解,记叙迷宫生成步骤和自动求解原理,完整dome

墨羽晨的博客 1978

【OpenClaw 故障排查完全指南】

OpenClaw 故障排查指南摘要 本指南针对OpenClaw 2026.2.26版本常见问题提供解决方案,适用于Windows/Linux/macOS平台。 核心问题及修复方案: 飞书插件连接失败:删除冲突插件或重装OpenClaw Ollama认证错误:设置环境变量OLLAMA_API_KEY="ollama-local" 配置警告:可安全忽略的安全扫描提示 端口占用:查找并终止占用18789端口的进程 插件重复加载:清理重复插件目录 快速修复: 提供一键修复PowerShell脚本

weixin_37572294的博客 1万+

Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现

Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现 目录 Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现 一、简单介绍 二、Car Racing 2D (2D赛车) 游戏内容与操作 三、相关说明 四、游戏代码框架 五、知识点 六、游戏效果预览 七、实现步骤 八、工程源码地址 九、延伸扩展 一、简单介绍 Unity 游戏实例开发集合,使用简单易懂的方式,讲解常见游戏的开发实现过程,方便

仙魁XAN 7702

JavaScript 迷宫

<html> <head> <style> #stage { border: 1px solid lightgray; } .rebuild { width:110px; height:30px; ...

waiguai80的专栏 431

智能车竞赛新手必看:单车定向组直线竞速与八字慢速实战技巧

本文为智能车竞赛新手提供单车定向组直线竞速与八字慢速的实战技巧,涵盖赛道分析、动力调校、传感器配置等关键环节。通过真实案例和代码示例,详细讲解如何平衡速度与稳定性,帮助选手避免常见失误,提升比赛成绩。特别针对智能车竞赛中的直线竞速和八字慢速项目,提供从硬件选型到临场策略的全方位指导。

weixin_28718793的博客 434

二维数组迷宫趣题

import java.util.Scanner; /** * A代表人物 * 核心思路,交换元素下标位置,走出迷宫 */ public class TwoDimensionalMap { public static void main(String[] args) { char[][] map={ {'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','.

PYROMANIA 528

怎样自己亲手搭建一个四比特加法器

如何用三极管搭建一个四比特加法器 一、前言 作为大一上学期第一个大作业,最终还是拖到了冬学期的第八周,从第七周的周六开始,一直到第八周周五上午课上展示,中间连续熬了好几天的夜,另外,白天凡是有时间都用在研究它了,最终大约是用了30个小时,完成了这个四比特加法器的“从零到一”。 最终,小组得分92,个人分数100(贡献比35%),也不枉自己投入的心血 二、器材 电阻 1 包(10kΩ×100,1kΩ×50) 三极管 1 包(9013×100,LED×6) 跳线 3 短 1.5 长 电源 1 个 USB 线

qq_34771124的博客 1万+

【训练】Qwen2.5VL 多机多卡 Grounding Box定位

之前的相关文章:【深度学习】LLaMA-Factory微调sft Qwen2-VL进行印章识别使用LLaMA-Factory微调sft Qwen2-VL-7B-Instruct构建最新的LLaMA-Factory镜像。

q742971636的博客 2583

html5迷宫小游戏,JS实现的走迷宫小游戏完整实例

本文实例讲述了JS实现的走迷宫小游戏。分享给大家供大家参考,具体如下:先来看看运行效果截图:完整实例代码如下:JS打造的走迷宫游戏function ShowMenu(bMenu) {document.all.idFinder.style.display = (bMenu) ? "none" : "block"document.all.idMenu.style.display = (bMenu) ?...

weixin_42345036的博客 1462

【DIY】使用STM32及PID算法实现一个磁悬浮玩具

今天教大家来做一个磁悬浮玩具。

小白白学电子 1万+

二维数组随机生成地图迷宫_Canvas 随机迷宫地图生成动画

JavaScript语言:JaveScriptBabelCoffeeScript确定var canvas = document.getElementById('canvas');var ctx = canvas.getContext('2d');'floor|random|round|abs|sqrt|PI|atan2|sin|cos|pow|max|min'.split('|').forEach...

weixin_39615741的博客 539

SAP-ABAP:ABAP Development Tools(ADT)安装配置学习分享教程-第一篇:ADT安装前置准备与环境校验教程

ABAP Development Tools(ADT)安装配置教程摘要 本文是ADT安装系列的第一篇,重点讲解环境准备与版本校验。ADT是基于Eclipse的现代ABAP开发工具,相比传统SAP GUI提供更智能的开发体验。安装前需确认: 推荐使用Eclipse 2026-03 + Java 21组合 操作系统需Windows 10+/macOS 14+ SAP GUI版本要求Windows≥8.00/macOS≥8.10 后端系统需NetWeaver 7.31 SP04+或S/4HANA 通过java -

baidu_35680696的博客 690

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

js可视化 迷宫问题

文章目录图片演示部分解释代码 图片演示 部分解释 算法部分用递归 代码 <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> bo

S_aitama的博客 569

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: 教你怎么理解正则表达式之零宽断言(环视)
下一篇: HTML5时代的纯前端上传图片预览及严格图片格式验证函数
Vilien
博客等级 码龄18年 35粉丝 17原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值