使用js实现的八皇后回溯算法,但是得到的结果,是有错的。若是有结果的话,理应都是长度为8的数组,但是结果不是。如效果图。请帮忙修改一下代码,至可以正常显示结果。<code>let coloum = 8; //棋盘的列let row = 8; //棋盘的行// 先创建一个二维数组let arrInner = new Array();for(var i=0;i<coloum;i++){ arrInner[i] = new Array();}let arrNew = arrInner.slice(0); //复制二维数组row_add = 0;var tmp = [];var total = 0;function dfs(row_add){ if(row_add==8){ total++; console.log('打印出结果:',tmp); tmp = []; return }else{ for(var i=0;i<8;i++){ if(check(i,row_add)==1){ arrNew[i][row_add] = 1; //如果通过验证,说明可以放皇后 tmp.push([i,row_add]) dfs(row_add+1); //然后继续调用 arrNew[i][row_add] = 0; //说明后面那一行都放不了皇后,所以上一行的皇后要清零,以免回溯的时候出现脏数据 tmp.pop([i,row_add]) } } }}function check(x,y){ //以该位置为基准,判断在同一列上有无已经放置了的皇后 for(var k=0;k<=7;k++){ // console.log('1:',x,k); if((k>=0)&&arrNew[x][k]==1){ return 0; } } //以该位置为基准,判断其右对角线上有没有已经放置了的皇后 for(var i=x,j=y;i>=0,j>=0;i--,j--){ // console.log('2:',i,j); if((i>=0&&j>=0)&&arrNew[i][j]==1){ return 0; } } //以该位置为基准,判断其左对角线上有没有已经放置了的皇后 for(var l=x,m=y;l<=7,m>=0;l++,m--){ // console.log('3:',l,m); if((l<=7&&m>=0)&&arrNew[l][m]==1){ return 0; } } return 1;}dfs(0);</code>