[英]basic recursive backtracking (robot 2D pathfinding)
我正在處理一個練習問題,被卡住了。 問題要求編寫一種方法,該方法使用兩個整數x和y來打印,以通過重復使用以下三個動作之一來打印從(0,0)到(x,y)在2D平面上傳播的所有解:
這些是一些示例調用:
我寫了以下代碼:
public void travel(int x, int y) {
if (x == 0 && y == 0) {
System.out.println();
} else if (x > 0 && y > 0) {
System.out.print("E ");
travel(x-1, y);
System.out.print("N ");
travel(x, y-1);
System.out.print("NE ");
travel(x-1, y-1);
} else if (x > 0 && y == 0) {
System.out.print("E ");
travel(x-1, y);
} else if (y > 0 && x == 0) {
System.out.print("N ");
travel(x, y-1);
}
}
調用上述方法將導致以下代碼:
我知道,對於此示例調用,問題在於E在需要E的三種不同情況下僅被打印一次,因為在調用后續遞歸方法之前已打印了E。
我想通過在旅行方法的每次調用中附加System.out.print命令來解決此問題(不確定這是正確的方法)。 這樣,每當調用travel方法時,每次都會用第一個字母打印結果。 但是,由於該方法不返回任何內容,因此無法在print語句中插入該方法。 這是我長期困擾的地方。
關於如何從這里出發的任何建議將不勝感激。
遞歸構建解決方案時,通常將部分構建的解決方案作為參數傳遞給遞歸調用。
public void travel(int x, int y, String path) {
if (x == 0 && y == 0) {
System.out.println(path);
} else if (x > 0 && y > 0) {
travel(x-1, y, path + ' E');
travel(x, y-1, path + ' N');
travel(x-1, y-1, path + ' NE');
} else if (x > 0 && y == 0) {
travel(x-1, y, path + ' E');
} else if (y > 0 && x == 0) {
travel(x, y-1, path + ' N');
}
}
看看我們如何構建路徑-並讓函數調用處理記住我們在搜索中的位置的復雜性? 這也具有簡化代碼的好特性,因為每個路徑只對System.out.println
一次調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.