回覆列表
  • 1 # 使用者834195712159

    給定一個二維陣列,求是否存在一條從左上角移動到右下角的路徑。在給定的二維陣列中,單元格的值為-1時表示不能透過;單元格的值為0時,表示可以透過。

    例如:給定一個二維陣列如下:

    { 0, 0, 0, -1, 0},

    {-1, 0, 0, -1, -1},

    { 0, 0, 0, -1, 0},

    {-1, 0, 0, 0, 0},

    { 0, 0, -1, 0, 0}

    路徑存在,返回YES

    { 0, 0, 0, -1, 0},

    {-1, 0, 0, -1, -1},

    { 0, 0, 0, -1, 0},

    {-1, 0, -1, 0, 0},

    { 0, 0, -1, 0, 0}

    路徑不存在,返回NO

    演算法分析

    這個問題簡單的解決方法是透過 BFS 或 DFS 演算法來查詢是否存在符合條件的路徑(Path)。

    更好的解決方法是透過將所有可訪問節點的值更改為1來標記它們。

    首先,將左上角第一個元素的值標記為1。然後在第一行中獲取下一個(當前)值並與前一個值進行比較。僅噹噹前值可到達時(不等於-1),才將其設定為前一個值。同樣,對列值執行相同的操作,方法是將當前值與前一列的值(如果可以訪問)進行比較並設定。

    然後從第一行和第一列開始,並獲取前一行和前一列的值。找到它們之間的最大值,並將當前索引設定為該最大值。如果當前索引值為-1,則不會有任何更改。

    最後,如果右下角的最終索引為1,則返回“是”,否則返回“否”。

  • 中秋節和大豐收的關聯?
  • 油炸鍋的油垢怎麼清洗?