您好,欢迎访问一九零五行业门户网

JavaScript实现N皇后问题算法谜题解答_javascript技巧

谜题
n皇后问题。将n个皇后放置在nxn的国际象棋棋盘上,其中没有任何两个皇后处于同一行、同一列或同一对角线上,以使得它们不能互相攻击。
策略
回溯法。
javascript解
以8皇后问题为例:
复制代码 代码如下:
/**
 * created by cshao on 12/28/14.
 */function getnqueens(order) {
  if (order     console.log('n queens problem apply for order bigger than 3');
    return;
  }
  var nqueens = [];
  var backtracking = false;
  rowloop:
  for (var row=0; row    if (nqueens[row] === undefined) {
      nqueens[row] = [];
    }
    for (var col=0; col      if (nqueens[row][col] === 0) {
        continue;
      } else if (backtracking && nqueens[row][col] == 1) {
        if (col === order-1) {
          resetrow(nqueens, order, row);
          row = row - 2;
          continue rowloop;
        }
        nqueens[row][col] = 0;
        backtracking = false;
        continue;
      }
nqueens[row][col] = 1;
      if (isqueenvalid(nqueens, row, col)) {
        continue rowloop;
      } else if (col == order-1) {
        backtracking = true;
        resetrow(nqueens, order, row);
        row = row - 2;
        continue rowloop;
      } else {
        nqueens[row][col] = 0;
        continue;
      };
    }
  }
  return nqueens;
}
function resetrow(nqueens, order, row) {
  for (var col=0; col    nqueens[row][col] = undefined;
  }
}
function isqueenvalid(nqueens, row, col) {
  for (var i=0; i
    if (nqueens[row][i] == 1) {
      return false;
    }
  }
  for (var j=1; j    if (nqueens[row-j][col]==1 || (nqueens[row-j][col-j]!=undefined && nqueens[row-j][col-j]==1) || (nqueens[row-j][col+j]!=undefined && nqueens[row-j][col+j]==1)) {
      return false;
    }
  }
  return true;
}function printqueens(queens) {
  for (var row=0; row    var rowtext = '';
    for (var col=0; col      if (queens[row][col]===undefined) {
        queens[row][col] = 0;
      }
      rowtext = rowtext + queens[row][col] + '  ';
    }
    console.log(rowtext);
  }
}
var queens = getnqueens(8);
printqueens(queens);
结果
复制代码 代码如下:
1  0  0  0  0  0  0  0 
0  0  0  0  1  0  0  0 
0  0  0  0  0  0  0  1 
0  0  0  0  0  1  0  0 
0  0  1  0  0  0  0  0 
0  0  0  0  0  0  1  0 
0  1  0  0  0  0  0  0 
0  0  0  1  0  0  0  0
其它类似信息

推荐信息