Skip to content

Commit d65a584

Browse files
committed
回溯算法
1 parent e66a183 commit d65a584

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
```javascript
2+
var result = [];
3+
let n = 0
4+
const cal8queens = (row) =>{
5+
// 终止条件
6+
if(row === 8){
7+
console.log(result)
8+
n++;
9+
return;
10+
}
11+
// 每一列的判断
12+
for(let column = 0; column < 8; column++){
13+
// 判断当前的列位置是否合适
14+
if(isOkCulomn(row,column)){
15+
// 保存皇后的位置
16+
result[row] = column;
17+
// 对下一行寻找数据
18+
cal8queens(row + 1);
19+
}
20+
// 此循环结束后,继续遍历下一种情况,就会形成一种枚举所有可能性
21+
}
22+
}
23+
24+
// 判断当前列是否合适
25+
const isOkCulomn = (row,column) =>{
26+
// 设置左上角
27+
let leftcolumn = column - 1;
28+
let rightcolumn = column + 1;
29+
30+
for(let i = row - 1;i >= 0; i--){
31+
// 判断当前格子正上方是否有重复
32+
if(result[i] === column) return false;
33+
34+
// 判断当前格子左上角是否有重复
35+
if(leftcolumn >= 0){
36+
if(result[i] === leftcolumn) return false;
37+
}
38+
39+
// 判断当前格式右上角是否有重复
40+
if(leftcolumn < 8){
41+
if(result[i] === rightcolumn) return false;
42+
}
43+
44+
// 继续遍历
45+
leftcolumn --;
46+
rightcolumn ++;
47+
}
48+
return true;
49+
}
50+
51+
// 打印八皇后
52+
const print = (result)=>{
53+
for(let i = 0;i < 8; i++){
54+
for(let j = 0;j < 8; j++){
55+
if(result[i] === j){
56+
console.log('Q' + ' ')
57+
}else{
58+
console.log('*' + ' ')
59+
}
60+
}
61+
}
62+
}
63+
64+
// 测试
65+
cal8queens(0);
66+
console.log(n)
67+
```
68+

0 commit comments

Comments
 (0)