递归算法

1. 迷宫问题

let map = []
for (let i = 0; i < 8; i++) {
  map[i] = []
  for (let j = 0; j < 7; j++) {
    map[i][j] = 0
  }
}
for (let i = 0; i < 7; i++) {
  map[0][i] = 1
  map[7][i] = 1
}
for (let i = 0; i < 8; i++) {
  map[i][0] = 1
  map[i][6] = 1
}
map[3][1] = 1
map[3][2] = 1
setWay(map, 1,1)

function setWay(map, i, j) {
  if (map[6][5] == 2) {
    return true
  } else {
    if (map[i][j] == 0) {
      map[i][j] = 2
      if (setWay(map, i + 1, j)) {//下找
        return true
      } else if (setWay(map, i, j + 1)) {//右找
        return true
      } else if (setWay(map, i - 1, j)) {//上找
        return true
      } else if (setWay(map, i, j - 1)) {//左找
        return true
      } else {
        map[i][j] = 3
        return false
      }
    } else {
      return false
    }
  }
}
console.log(map);

2. 八皇后问题

let max = 8
let array = new Array(8)
function judge(n) {
  for (let i = 0; i < n; i++) {
     // 第二个条件针对斜线攻击, 如果两个皇后形成正方形的对角,则可以攻击,所以让行坐标(n)相减是否等于列坐标(array[n])相减, 是的话则形成正方形
    if (array[i] === array[n] || Math.abs(n-i) == Math.abs(array[n] - array[i])) {
      return false
    }
  }
  return true
}
function check(n) {
  if (n == max) {
    console.log(array);
    return
  }
  for (let i = 0; i < max; i++) {
    array[n] = i
    if(judge(n)){
      check(n+1)
    }
  }
}
check(0)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容