【发布时间】:2020-09-21 13:27:00
【问题描述】:
我正在尝试制作 N-Queens 可视化工具,并将我的求解器连接到 html 文档。我的问题是,我试图以 place 函数的每一个 1 秒的间隔逐步显示所有内容,而不是立即显示已完成的解决方案。
换句话说,我想一步一步地展示每个动作。
我的放置功能,也与 DOM 上的表格挂钩,因此当它被放置在板上时,它也会将其放置在 html 表格上。
function place(board, row, col, val, table) {
const newRow = board[row].split('');
newRow[col] = val;
board[row] = newRow.join('');
//place on DOM as well
table.childNodes[row].childNodes[col].innerHTML = val;
}
我的求解器的代码是这样的
function solver(board, row, col, solutions) {
if (col === board.length) {
solutions.push([...board]);
return;
}
const currentTable = listOfTables[solutions.length];
for (let i = 0; i < board.length; i++) {
if (canPlace(board, i, col)) {
place(board, i, col, 'Q', currentTable);
solver(board, row, col + 1, solutions);
place(board, i, col, '.', currentTable);
}
}
}
我试图将 setTimeout 包装在求解器函数中,但当超时命中时,它仍会同时运行代码。
currentTable 变量用于了解 DOM 中的哪些表当前将被使用。
如果有人需要,这里是包含所有代码的 CodePen https://codepen.io/vvus/pen/KKVKMrq?editors=1111
【问题讨论】:
-
一种方法可以将所有移动推入一个数组,然后在最后循环超时。
标签: javascript html recursion dom timeout