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

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

關(guān)于使用回溯java解決迷宮的問題

關(guān)于使用回溯java解決迷宮的問題

元芳怎么了 2022-08-17 10:59:45
我正在嘗試制作一個應(yīng)該解決迷宮的應(yīng)用程序,并且我正在嘗試使用回溯技術(shù)來實(shí)現(xiàn)它。我已經(jīng)開發(fā)了一個代碼,并適用于一些簡單的場景,但至少在一個更復(fù)雜的場景中失敗了。在我公開代碼和具體問題之前,我想解釋一下它是如何工作的。關(guān)于代碼所以我有兩種方法 initializeMaze1 和 initializedMaze2,它們只是加載一些預(yù)設(shè)場景(起點(diǎn)、一些墻壁和終點(diǎn))。我對第一個沒有問題,但隨著第二個而改變。Thouse方法給了我一個整數(shù)矩陣,它表示實(shí)體(墻,起點(diǎn)...)。我還有一種用于凈化的打印方法。最后是迷宮方法,即回溯代碼。參數(shù)為:生成的迷宮(由我之前討論的方法完成)?!巴婕摇痹诿詫m行中的位置。“玩家”在迷宮列中的位置。解決方案。這是另一個矩陣,它將給出玩家的路徑,所以我將在那里標(biāo)記運(yùn)動,并且我將原始迷宮解開?,F(xiàn)在我將更深入地討論回溯代碼?;厮荽a所以這個方法是一個for循環(huán),它嘗試一些嘗試(嘗試是玩家可能的移動),所以我們嘗試每個人,直到我們獲得有效的移動或返回,因?yàn)闆]有可能的有效移動。我有一個isFactible方法,可以分析運(yùn)動并說它是否正常(如果撞到墻上或如果超出限制)。如果 不可行,則嘗試其他移動(增加 for 循環(huán)的迭代變量)。如果 是 不可行的,我們完成循環(huán),取消標(biāo)記實(shí)際位置并返回一個 false 值(因此其他上下文將知道它)。如果是事實(shí),我們將標(biāo)記新位置,我們需要在兩種可能性之間進(jìn)行區(qū)分:我們要移動的位置是結(jié)束(服從或退出),所以我們成功了。我們要移動的位置不是終點(diǎn),所以我們再次遞歸地調(diào)用我們已經(jīng)移動的新位置?,F(xiàn)在我要談?wù)勎野l(fā)現(xiàn)的問題。問題當(dāng)我加載第二個迷宮時,我們有這個場景:S:開始。愛因斯坦:空。W: 墻。女:完成。|S|E|W|W||E|E|E|E|這是問題所在|E|E|W|W||W|E|E|F|所以代碼,嘗試先向右移動,如果沒有,請嘗試向下移動,如果不嘗試左移,如果沒有,請嘗試向上移動。我們有預(yù)設(shè)運(yùn)動。所以向右移動,好吧。然后試圖再次向右移動,但有一堵墻。所以下去,好吧。然后,向右移動,直到最后一列。試圖向右移動,他不能,因?yàn)槌鋈チ恕T噲D向下移動,他不能,有一堵墻。試圖向左移動,他可以,所以移動到那里。我有這個無限循環(huán)。我想的第一件事是,好吧,只要增加更多的限制,避免他可以移動到他已經(jīng)去過的地方。但我不認(rèn)為這是一個好的解決方案。您知道如何解決此問題嗎?也許,如果我在代碼中犯了一些錯誤,或者如果我選擇的解決問題的策略不好,我將不勝感激您的意見。謝謝你。
查看完整描述

3 回答

?
溫溫醬

TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個贊

就像你(想想你)解決一個真正的迷宮一樣。

對于每個位置,請記錄您從哪個方向到達(dá)以及您離開的(有效)方向(我想在你離開之前)。

當(dāng)您返回某個位置(應(yīng)該允許重新訪問)時,將已經(jīng)嘗試過的方向視為與墻壁相同的方式 - 即它是無效的。

當(dāng)你沒有更有效的方向時,回到你來的時候。

因此,與代碼的唯一區(qū)別是記住每個位置的“嘗試和失敗”方向。這應(yīng)該足以防止遞歸。


查看完整回答
反對 回復(fù) 2022-08-17
?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個贊

正如DrPhill所說,你必須跟蹤你去過的地方。你已經(jīng)在函數(shù)中這樣做了,但你沒有在函數(shù)中使用這些信息。markcheckValidMovement


您應(yīng)該將該函數(shù)更改為如下所示:


private static boolean checkValidMovement(int[][] maze, int stepX, int stepY , int movement, int[][] solution)

  {

    if(checkNotOutOfBounds(maze, stepX, stepY, movement) 

        && checkNotCollideWithObstacle(maze, stepX, stepY, movement)

        && isNotYetVisited(maze, stepX, stepY, movement, solution))

    {

      return true;

    }

    return false;

  }   

其中,如果 at 下一步不相等,則函數(shù)返回 false。isNotYetVisitedsolution1


希望這有幫助。


查看完整回答
反對 回復(fù) 2022-08-17
?
ITMISS

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個贊

我認(rèn)為最簡單的方法是記住你最后一次存在的坐標(biāo)。如果除了回去之外沒有其他有效的動作,請返回并將您所在的位置標(biāo)記為墻壁。最后,您將到達(dá) [F]。


查看完整回答
反對 回復(fù) 2022-08-17
  • 3 回答
  • 0 關(guān)注
  • 99 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號