一个5X5的棋盘,
“马”从左上角出发,
按“日”字跳马,
要求不重复地跳经所有位置,
求出符合规则的所有方案。
var step0 = 0;
var x0 = 0;
var y0 = 0;
var xLen = 5;
var yLen = 5;
var Sides = [[1,2],[2,1],[-1,2],[-2,1],[1,-2],[2,-1],[-1,-2],[-2,-1]];
var xSide = 0;
var ySide = 0;
var map0 = MapCreat(xLen, yLen);
MapPrint(map0);
var mapList = new Array();
new MapSet(step0, x0, y0, map0);
function MapCreat(lenX, lenY) {
let map = new Array();
for (let i = 0; i < lenX; i++) {
map[i] = new Array();
for (let j = 0; j < lenY; j++) {
map[i][j] = -1;
}
}
return map;
}
function MapCopy(map) {
let map2 = new Array();
for (let i = 0; i < map.length; i++) {
map2[i] = new Array();
for (let j = 0; j < map[0].length; j++) {
map2[i][j] = map[i][j];
}
}
return map2;
}
function MapPrint(map) {
for (let i = 0; i < map.length; i++) {
let str = "";
for (let j = 0; j < map[0].length; j++) {
str += map[i][j].toString() + "\t";
}
console.log(str);
}
console.log("\n");
return;
}
function MapSet(stepNum, stepX, stepY, map_1) {
let map = MapCopy(map_1);
map[stepX][stepY] = stepNum;
if (stepNum < map.length * map[0].length - 1) {
for (let i = 0; i < 8; i++) {
xSide = stepX + Sides[i][0];
ySide = stepY + Sides[i][1];
if (xSide >= 0 && xSide < map.length && ySide >= 0 && ySide < map[0].length) {
if (map[xSide][ySide] == -1) {
MapSet(stepNum + 1, xSide, ySide, map);
}
}
}
}
else {
mapList[mapList.length] = map;
console.log(mapList.length);
MapPrint(map);
}
return;
}