当前位置: 首页 > news >正文

迷宫问题演示

1、迷宫问题解决方案

(1)网页演示

(2)代码

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>迷宫动画演示</title><style>body {display: flex;flex-direction: column;align-items: center;font-family: Arial, sans-serif;}#maze {display: grid;grid-template-columns: repeat(10, 30px);grid-template-rows: repeat(10, 30px);gap: 1px;}.cell {width: 30px;height: 30px;background-color: #fff;border: 1px solid #ccc;}.wall {background-color: #000;}.path1 {background-color: #0f0; /* 第一条路径为绿色 */}.path2 {background-color: #ff0; /* 第二条路径为黄色 */}.path3 {background-color: rgb(208, 0, 255); /* 第三条路径为紫色 */}.start {background-color: #00f;}.end {background-color: #f00;}#steps {margin-top: 20px;font-size: 18px;}#controls {margin-top: 20px;}</style>
</head>
<body><h1>迷宫问题解决方案</h1><div id="maze"></div><div id="controls"><button id="startButton">开始解决迷宫</button><button id="resetButton" style="display: none;">返回</button></div><div id="steps"></div><script>const maze = [[0, 1, 0, 0, 0, 0, 0, 1, 0, 0],[0, 1, 0, 1, 1, 1, 0, 1, 0, 0],[0, 0, 0, 1, 0, 0, 0, 1, 0, 0],[0, 1, 1, 1, 0, 1, 1, 1, 0, 0],[0, 0, 0, 0, 0, 0, 0, 1, 0, 0],[0, 1, 1, 1, 1, 1, 0, 1, 1, 1],[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[1, 1, 1, 1, 1, 1, 1, 1, 1, 0],[0, 0, 0, 0, 0, 0, 0, 0, 1, 0],[0, 1, 1, 1, 1, 1, 0, 0, 0, 0],];const mazeContainer = document.getElementById('maze');const stepsDisplay = document.getElementById('steps');const startButton = document.getElementById('startButton');const resetButton = document.getElementById('resetButton');function createMaze() {mazeContainer.innerHTML = ''; // 清空迷宫maze.forEach((row, i) => {row.forEach((cell, j) => {const cellDiv = document.createElement('div');cellDiv.classList.add('cell');if (cell === 1) {cellDiv.classList.add('wall');}if (i === 0 && j === 0) {cellDiv.classList.add('start');}if (i === maze.length - 1 && j === maze[0].length - 1) {cellDiv.classList.add('end');}mazeContainer.appendChild(cellDiv);});});}function findPaths() {const paths = [];const visited = new Set();const directions = [[1, 0], [0, 1], [-1, 0], [0, -1]]; // 下、右、上、左function dfs(x, y, path) {if (x < 0 || y < 0 || x >= maze.length || y >= maze[0].length || maze[x][y] === 1 || visited.has(`${x},${y}`)) {return;}visited.add(`${x},${y}`);path.push([x, y]);if (x === maze.length - 1 && y === maze[0].length - 1) {paths.push([...path]);if (paths.length >= 3) return; // 找到三条路径后停止}for (const [dx, dy] of directions) {dfs(x + dx, y + dy, path);}path.pop();visited.delete(`${x},${y}`);}dfs(0, 0, []);return paths;}function animatePaths(paths) {paths.forEach((path, pathIndex) => {const pathLength = path.length;stepsDisplay.innerHTML += `路径 ${pathIndex + 1} 步数: ${pathLength}<br>`; // 显示步数path.forEach((position, index) => {setTimeout(() => {const [x, y] = position;const cell = mazeContainer.children[x * maze[0].length + y];cell.classList.add(`path${pathIndex + 1}`); // 根据路径索引设置不同的颜色}, index * 500 + pathIndex * 5000); // 不同路径之间的延迟});});// 显示返回按钮setTimeout(() => {resetButton.style.display = 'inline-block';}, paths.length * 5000);}startButton.addEventListener('click', () => {const paths = findPaths();stepsDisplay.innerHTML = ''; // 清空之前的显示animatePaths(paths);startButton.style.display = 'none'; // 隐藏开始按钮resetButton.style.display = 'none'; // 隐藏返回按钮});resetButton.addEventListener('click', () => {createMaze();stepsDisplay.innerHTML = ''; // 清空步数显示startButton.style.display = 'inline-block'; // 显示开始按钮resetButton.style.display = 'none'; // 隐藏返回按钮});createMaze();</script>
</body>
</html>

相关文章:

  • ShaderToy学习笔记 03.多个形状和旋转
  • ‌C/C++对时间的处理
  • Scratch——第19课 正话反说问题
  • 线程池(四):并发编程常见问题解析
  • QT6 源(52)篇二:存储 c 语言字符串的类 QByteArray 的使用举例,
  • 中美艺术教育深度融合,Glowstar与ACSDA在尔湾签署战略合作协议推动艺术发展
  • ShaderToy学习笔记 02.圆
  • JAVA多线程(8.0)
  • Pygame核心概念解析:Surface、Clock与事件循环
  • C++学习-入门到精通-【2】类、对象和字符串的介绍
  • 2025.04.26-饿了么春招笔试题-第二题
  • leetcode 26和80
  • DIY 3D打印机 原理及步骤概况
  • MySQL基本命令--系统+用户+表
  • 搭建动态SQL取数
  • 【Token系列】02 | Embedding是怎么“长出来”的?从查表到训练过程全解
  • JavaScript基础知识合集笔记1——数据类型
  • Qt开发:QSettings的介绍和使用
  • 如何下载VSCode插件市场为VSIX文件
  • 2025第十六届蓝桥杯省赛第二场(京津冀)JAVA B组真题回顾
  • 六朝文物草连空——丹阳句容南朝石刻考察纪
  • 读科学发展的壮丽史诗,也读普通人的传奇
  • 蜀道考古调查阶段性成果发布,新发现文物遗存297处
  • 调查丨当节气出现“时差”,陕西的果农们经历着什么?
  • 青海一只人工繁育秃鹫雏鸟破壳后脱险成活,有望填补国内空白
  • 朝中社发表评论文章,谴责美军部署B1-B轰炸机至日本