給定一個二維陣列,求是否存在一條從左上角移動到右下角的路徑。在給定的二維陣列中,單元格的值為-1時表示不能透過;單元格的值為0時,表示可以透過。
例如:給定一個二維陣列如下:
{ 0, 0, 0, -1, 0},
{-1, 0, 0, -1, -1},
{-1, 0, 0, 0, 0},
{ 0, 0, -1, 0, 0}
路徑存在,返回YES
{-1, 0, -1, 0, 0},
路徑不存在,返回NO
演算法分析
這個問題簡單的解決方法是透過 BFS 或 DFS 演算法來查詢是否存在符合條件的路徑(Path)。
更好的解決方法是透過將所有可訪問節點的值更改為1來標記它們。
首先,將左上角第一個元素的值標記為1。然後在第一行中獲取下一個(當前)值並與前一個值進行比較。僅噹噹前值可到達時(不等於-1),才將其設定為前一個值。同樣,對列值執行相同的操作,方法是將當前值與前一列的值(如果可以訪問)進行比較並設定。
然後從第一行和第一列開始,並獲取前一行和前一列的值。找到它們之間的最大值,並將當前索引設定為該最大值。如果當前索引值為-1,則不會有任何更改。
最後,如果右下角的最終索引為1,則返回“是”,否則返回“否”。
給定一個二維陣列,求是否存在一條從左上角移動到右下角的路徑。在給定的二維陣列中,單元格的值為-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,則返回“是”,否則返回“否”。