国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

JavaScript實(shí)現(xiàn)N皇后問題算法謎題解答

2024-05-06 16:13:07
字體:
供稿:網(wǎng)友
這篇文章主要介紹了JavaScript實(shí)現(xiàn)N皇后問題算法謎題解答,N皇后問題是指將N個(gè)皇后放置在NxN的國(guó)際象棋棋盤上,其中沒有任何兩個(gè)皇后處于同一行、同一列或同一對(duì)角線上,以使得它們不能互相攻擊,需要的朋友可以參考下
 
 

謎題

N皇后問題。將N個(gè)皇后放置在NxN的國(guó)際象棋棋盤上,其中沒有任何兩個(gè)皇后處于同一行、同一列或同一對(duì)角線上,以使得它們不能互相攻擊。

策略

回溯法。

JavaScript解

以8皇后問題為例:

復(fù)制代碼代碼如下:

/**
 * Created by cshao on 12/28/14.
 */

 

function getNQueens(order) {
  if (order < 4) {
    console.log('N Queens problem apply for order bigger than 3');
    return;
  }

  var nQueens = [];
  var backTracking = false;
  rowLoop:
  for (var row=0; row<order; row++) {
    if (nQueens[row] === undefined) {
      nQueens[row] = [];
    }

    for (var col=0; col<order; 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<order; col++) {
    nQueens[row][col] = undefined;
  }
}

function isQueenValid(nQueens, row, col) {
  for (var i=0; i<col; i++) {
    if (nQueens[row][i] == 1) {
      return false;
    }
  }
  for (var j=1; j<row+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<queens.length; row++) {
    var rowText = '';
    for (var col=0; col<queens.length; col++) {
      if (queens[row][col]===undefined) {
        queens[row][col] = 0;
      }
      rowText = rowText + queens[row][col] + '  ';
    }
    console.log(rowText);
  }
}

var queens = getNQueens(8);
printQueens(queens);

 

結(jié)果

 

復(fù)制代碼代碼如下:

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
 

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 鄂托克前旗| 邳州市| 怀仁县| 宝鸡市| 龙江县| 体育| 武夷山市| 瑞昌市| 育儿| 西贡区| 鹤岗市| 高邮市| 得荣县| 安多县| 德钦县| 香港| 罗田县| 西吉县| 普安县| 韶关市| 济源市| 天水市| 团风县| 璧山县| 乐清市| 沾化县| 兴业县| 贡觉县| 永平县| 贵港市| 苍山县| 伊川县| 桐庐县| 陕西省| 陆丰市| 浮山县| 汝州市| 章丘市| 棋牌| 凤凰县| 汉中市|