鍍金池/ 問(wèn)答/人工智能  HTML/ 【請(qǐng)大牛指教一二】深度優(yōu)先搜索尋找到達(dá)指定位置的路線,想打印出所有路線的時(shí)候出錯(cuò)

【請(qǐng)大牛指教一二】深度優(yōu)先搜索尋找到達(dá)指定位置的路線,想打印出所有路線的時(shí)候出錯(cuò)。

想要輸出所有可能的路線,但是結(jié)果只輸出一種路線,想了很久沒(méi)想明白 Orz

以下是源碼:

//ma是迷宮
//mb用來(lái)標(biāo)記走過(guò)的路mb.fill(0);
//0表示空地,可通行
//1表示障礙物,走不動(dòng)
//目的地在(x0,y0)
//position=[]
//存放的是現(xiàn)在的位置
//direction=[[-1,0],[0,-1],[1,0],[0,1]];
//destination=[x0,y0];
 
let ma = [[0, 0, 1, 0],
          [0, 0, 0, 0],          
          [0, 0, 1, 0],          
          [0, 1, 0, 0],          
          [0, 0, 0, 1]];
 
let mb = [[1, 0, 0, 0],          
          [0, 0, 0, 0],          
          [0, 0, 0, 0],          
          [0, 0, 0, 0],          
          [0, 0, 0, 0]];
 
let position = new Array(15);
position[0] = [0, 0];
let direction = [[-1, 0], [0, -1], [1, 0], [0, 1]];
let destination = [3, 2];
 
function maze(step) {    
    //結(jié)束條件是抵達(dá)目的地    
    if (position[step][0] === destination[0] && position[step][1] === destination[1]) {       
        console.log(position);        
        return;    
    }
     
    for (let i = 0; i < 4; i++) {                
        let new_x = position[step][0] + direction[i][0];        
        let new_y = position[step][1] + direction[i][1]; 
                       
        if (new_x < 0 || new_x > 4 || new_y < 0 || new_y > 3) {            
            continue;        
        }
         
        if (ma[new_x][new_y] === 0 && mb[new_x][new_y] === 0) {           
            position[step + 1] = [new_x, new_y];           
            mb[new_x][new_y] = 1;         
            maze(step + 1);           
            mb[new_x][new_y] = 0;       
        }  
    }    
    return;
}
                   
maze(0);
回答
編輯回答
冷咖啡

(不懂js)沒(méi)看出來(lái)... 不過(guò)你判斷ma的語(yǔ)句怎么好像沒(méi)有.. 你可以輸出中間過(guò)程自己看一下

2017年2月17日 02:34