簡體   English   中英

尋找迷宮中的最短路徑

[英]Finding the shortest path in a maze

我是業余程序員,學習如何編程。 我從來沒有上過任何計算機科學課程,所以我很難解決這個瑣碎的問題:

class Room {
    String name;
    ArrayList<Room> neighbors = new ArrayList<Room>();

    // constructor with name
    // getters
    void addNeighbor(Room room) {
        neighbors.add(room);
    }
}

class Finder {
    void findShortestPath(Room start, Room end) {
        // ?
    }
}

每個房間都有一些鄰居。 超過4,所以它不像矩陣導向的問題。 您將獲得最終房間,並且必須找到從起始房間開始的最短路徑(比較房間的名稱)。 結果應該是“方式”,如:

開始:廚房

結束:廁所

路徑:廚房,客廳,走廊,卧室,廁所

我想我必須對房間使用一些遞歸,我想我應該保存在已經存在於某個堆棧中的位置。 但我真的不知道如何開始。

你們中的一些CS人可以幫助我嗎? 謝謝

您正在尋找BFS

在您的情況下,圖G = (V,E)實際上是V= { all rooms }E = {(u,v), (v,u) | u and v are neighboring rooms } E = {(u,v), (v,u) | u and v are neighboring rooms }

請注意,您並不關心在算法開始之前沒有所有邊[鄰居] - 您知道如何使用neighbors字段動態計算相關的邊[和房間]集。
這是正確的,因為您需要為路徑使用的每個“邊緣” - 當您發現距離源路徑更近的房間時“被發現”。

您可以查看這篇文章 - 如何在運行BFS后找到實際路徑。

你想寫一個廣度優先的搜索。 有關此主題的資源很多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM