前端算法js:跳格子游戏
生活随笔
收集整理的這篇文章主要介紹了
前端算法js:跳格子游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 前端算法js:跳格子游戲
let arrFlag, arrNode, stepAll; // 節點遍歷狀態,節點的相鄰啟動點數組,是否完成所有步驟
function jumpGame2(num, arr) {arrFlag = new Array(num).fill(0); // 初始化節點狀態為0 ,1=已經遍歷了,死循環;2=該節點已經遍歷完成了stepAll = true; // 默認能完成所有節點arrNode = []; // 相鄰節點啟用數組for (let i = 0; i < num; i++) {arrNode.push(arr.filter((el) => el[1] == i).map((elc) => elc[0])); // 將數組過濾并map成需要的節點啟用數組}if (arrNode.some((el) => !el.length)) { // 有沒有默認開啟的節點for (let i = 0; i < num && stepAll; i++) { // 對每隔節點使用dfs遍歷,判斷是否完成全部節點if (arrFlag[i] == 0) { // 只有當該節點沒有被遍歷的情況下執行dfsdfs(i);}}return stepAll ? "yes" : "no"; // 返回結果stepAll來自dfs的遍歷處理} else {return "no"; // 如果沒有默認開啟的節點就直接no}
}
function dfs(index) {arrFlag[index] = 1; // 第一步設置遍歷狀態為已遍歷let arrNodeChild = arrNode[index]; // 獲取當前節點下的所有啟動節點for (let j = 0, len = arrNodeChild.length; j < len; j++) { // 遍歷啟動節點if (arrFlag[arrNodeChild[j]] == 0) { // 如果啟動節點未啟動狀態dfs(arrNodeChild[j]); // 繼續dfsif (!stepAll) { // 若dfs中遍歷到已經遍歷過的節點,跳出循環break;}} else if (arrFlag[arrNodeChild[j]] == 1) { // 若遍歷到已經遍歷過的節點,跳出循環stepAll = false; // 并設stepAll為false,意思是這個遍歷不成功,并跳出循環break;}}arrFlag[index] = 2; // 若上面循環順利完成,意思當前節點及其啟動節點都已經通過dfs,表示該節點已經遍歷完
}
console.log(jumpGame2(3, [[0, 1],[0, 2],])); // yes
console.log(jumpGame2(2, [[1, 0],[0, 1],])); // no
console.log(jumpGame2(4, [[1, 3],[0, 1],[3, 2],[2, 0],])); // no
console.log(jumpGame2(4, [[0, 1],[3, 2],[2, 3],])); // no
console.log(jumpGame2(6, [[0, 1],[0, 2],[0, 3],[0, 4],[0, 5],])); // yes
console.log(jumpGame2(5, [[4, 3],[0, 4],[2, 1],[3, 2],])); // yes
console.log(jumpGame2(4, [[1, 2],[1, 0],])); // yes
總結
以上是生活随笔為你收集整理的前端算法js:跳格子游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android学习之展示图片资源
- 下一篇: 分享一款教育培训机构学员信息管理系统