JavaScript示例程序(参考百度百科):
function queen(a, cur) {
if (cur==a.length) { console.log(a); return; }
for (var i = 0; i < a.length; i++) {
a[cur] = i;
var flag = true;
for (var j = 0; j < cur; j++) {
var ab = i - a[j];
if (a[j]==i||(ab>0?ab:-ab)==cur-j) { flag=false; break };
};
if (flag) { queen(a,cur+1); }
};
};
queen([1,1,1,1,1,1,1,1],0); // 输出92种不同解
可以想象成一个小孩走进了八皇后布置的8*8格迷宫内,只有按照指定的规则路径才能打开下一扇门。每次都是从第一通道走到最后一通道,要么成功返回,要么走到最后的死胡同(没找到有效解)再返回,只能一层一层返回上一通道的入口处继续探寻下一入口再次尝试。
结合想象 ,可以更形象的理解回溯算法的含义。
上面JS程序输出的第一种可行解的回溯示例图: