第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數(shù)獨求解器可以在 python 中運行,但不能在 javascript 中運行

數(shù)獨求解器可以在 python 中運行,但不能在 javascript 中運行

一只斗牛犬 2023-11-02 19:57:20
因此,我觀看了有關編寫數(shù)獨求解器的 Computerphile 視頻,并設法讓代碼在 python 中運行,這就是我得到的:def possible(grid, y, x, n):for i in range(0,9):    if grid[y][i] == n:        return False    if grid[i][x] == n:        return Falsex0 = (x//3)*3y0 = (y//3)*3for i in range(0,3):    for j in range(0,3):        if grid[y0+i][x0+j] == n:            return Falsereturn Truedef solver(grid):    for y in range(9):        for x in range(9):            if grid[y][x] == 0:                for n in range(1,10):                    if possible(grid, y, x, n):                        grid[y][x] = n                        solver(grid)                        grid[y][x] = 0                return    print(np.matrix(grid))這段代碼可以正常工作。但我想嘗試讓它在 Web 應用程序中工作,所以我將其轉換為 Javascript,如下所示:function possible(board, y, x, n) {    for(i = 0; i < 9; i++) {        if(board[y][i] === n) {            return false;        }        if(board[i][x] === n) {            return false;        }    }    y0 = Math.floor(y/3)*3;    x0 = Math.floor(x/3)*3;    for(i = 0; i < 3; i++) {        for(j = 0; j < 3; j++) {            if(board[i+y0][j+x0] === n) {                return false;            }        }    }    return true;} function solver(board) {    for(y = 0; y < 9; y++) {        for(x = 0; x < 9; x++) {            if(board[y][x] === 0) {                for(n = 1; n < 10; n++) {                    if(possible(board, y, x, n)) {                        board[y][x] = n;                        solver(board);                        board[y][x] = 0;                    }                }                return;            }        }    }    console.log(board);}據(jù)我所知,這些函數(shù)是完全相同的,而且由于它可以在 Python 中工作,所以我不明白為什么它不能在 JavaScript 中工作。在 JS 中,它似乎從未到達 console.log(board) 行,所以我在徘徊是否達到最大遞歸深度或類似的簡單東西。
查看完整描述

1 回答

?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

如果您在函數(shù)內使用 for 循環(huán),var將創(chuàng)建一個局部變量,“no var”將查找作用域鏈,直到找到該變量或到達全局作用域。這意味著您需要var在 for 循環(huán)內創(chuàng)建變量時聲明 ,以避免一個循環(huán)與另一個循環(huán)混淆。

所以你的代碼應該是這樣的:

function possible(board, y, x, n) {

? ? for (var i = 0; i < 9; i++) {

? ? ? ? if (board[y][i] === n) {

? ? ? ? ? ? return false;

? ? ? ? }

? ? ? ? if (board[i][x] === n) {

? ? ? ? ? ? return false;

? ? ? ? }

? ? }

? ? y0 = Math.floor(y / 3) * 3;

??

? ? x0 = Math.floor(x / 3) * 3;

? ? for (var i = 0; i < 3; i++) {

? ? ? ? for (var j = 0; j < 3; j++) {

? ? ? ? ? ? if (board[y0+i][x0+j] === n) {

? ? ? ? ? ? ? ? return false;

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? return true;

}


function solver(board) {

? ? for (var y = 0; y < 9; y++) {

? ? ? ? for (var x = 0; x < 9; x++) {

? ? ? ? ? ? if (board[y][x] === 0) {

? ? ? ? ? ? ? ? for (var n = 1; n < 10; n++) {

? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? if (possible(board, y, x, n)) {

? ? ? ? ? ? ? ? ? ? ? ? board[y][x] = n;

? ? ? ? ? ? ? ? ? ? ? ? solver(board);

? ? ? ? ? ? ? ? ? ? ? ? board[y][x] = 0;?

? ? ? ? ? ? ? ? ? ? }?


? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? return

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? console.log(board);

}


查看完整回答
反對 回復 2023-11-02
  • 1 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號