爲什麼我們需要回溯騎士之旅? 我們可以通過只使用遞歸嗎? 我試圖做到這一點,但它給出了錯誤的答案,我無法弄清楚代碼或邏輯出錯的地方。在騎士之旅中需要回溯
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int[][] ans=new int[8][8];
for(int d=0;d<8;d++){
for(int e=0;e<8;e++){
ans[d][e]=-1;
}
}
int[] x={2,1,-2,1,-1,-2,-1,2};
int[] y={1,2,1,-2,-2,-1,2,-1};
func(x,y,ans,7,7,1);
}
public static void func(int[] x,int[] y,int[][] ans,int i,int j,int count){
if(count==64){
for(int d=0;d<8;d++){
for(int e=0;e<8;e++){
System.out.print(ans[d][e]+" ");
}
System.out.println();
}
}
if(ans[i][j]!=-1){
return;
}
else{
ans[i][j]=count;
for(int u=0;u<8;u++){
if(i+x[u]>=0 && i+x[u]< 8 && j+y[u]>=0 && j+y[u]<8){
func(x,y,ans,i+x[u],j+y[u],count+1);
}
}
}
return;
}
}
您正在使用back遞歸跟蹤順便說一句。 –
可以請你告訴我我的代碼或邏輯出錯的地方。在我的代碼數量上升到只有54,但我無法弄清楚爲什麼? –
這是一個不同的問題,尼克希爾。每個帖子有一個問題!在原始問題上,回溯可以通過遞歸或堆棧+循環來實現。任何使用遞歸來探索可能性的樹(例如,在騎士的遊覽中跳躍)也是回溯。 – tucuxi