題目:請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中任意一格開始,每一步可以在矩陣中向左、右、上、下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如在下面的3×4的矩陣中包含一條字串「bfce」的路徑(路徑中的字母用下劃線標出)。但矩陣中不包含字串「abfb」的路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入這個格仔。
a b t g
c f c s
j d e h
解題思路:這題是一道經典的回溯法應用題,首先在陣列中找到字串的首字元,設它座標是(row, col),然後再從(row, col)開始查詢它的上下左右四個位置的元素,有沒有哪個和字串的第二個字元對應,如果有某個位置的元素與之對應,那就利用遞迴再查詢這個位置的上下左右四個元素;如果沒有對應,那就回溯到上乙個座標(如果上乙個座標的元素是字串的首元素,那就重新在陣列中查詢其他對應字串首元素的座標)
< code >
int haspath(const
char* matrix, int rows, int cols, char* str)
}free(visited);
visited = null;
return0;}
int haspathcore(const
char* matrix, int rows, int cols, int row, int col, int* pathlength, const
char* str, int* visited)
}return haspath;
}
劍指Offer 面試題12(矩陣中的路徑)
這裡是引用 題目描述 請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的徑。路徑可以從矩陣中任意一格開始,每一步可以在矩陣中向左 右 上 下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如在下面的3 4的矩陣中包含一條字串 bfce 的路徑 路徑中的字母...
劍指offer面試題12 矩陣中的路徑
a b t g c f c s j d e h 可以用回溯法來做這道題,首先,在矩陣中任選乙個格仔作為路徑的起點。假設矩陣中某個格仔的字元為ch,並且這個格仔對應於路徑上的第i個字元。如果路徑上的第i個字元不是ch,那麼這個格仔不可能處在路徑上的第i個位置。如果路徑上的第i個字元正好是ch,那麼到相...
劍指offer 面試題12 矩陣中的路徑
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。例如 abce sfcs adee 矩陣中包含一條字串 bcced 的路...