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)