這裡是引用題目描述
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的徑。路徑可以從矩陣中任意一格開始,每一步可以在矩陣中向左、右、上、下移動一格。如果一條路徑經過了矩陣的某一格,那麼該路徑不能再次進入該格仔。例如在下面的3×4的矩陣中包含一條字串「bfce」的路徑(路徑中的字母用下劃線標出)。但矩陣中不包含字串「abfb」的路徑,因為字串的第乙個 字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入這個格仔。
// a b t g
// c f c s
// j d e h
示例**
#include
#include
#include
using
namespace std;
bool
haspathcore
(const
char
* matrix,
int rows,
int cols,
int row,
int col,
const
char
* str,
int& pathlength,
bool
* visited)
;bool
haspath
(const
char
* matrix,
int rows,
int cols,
const
char
* str)}}
delete
visited;
return
false;}
bool
haspathcore
(const
char
* matrix,
int rows,
int cols,
int row,
int col,
const
char
* str,
int& pathlength,
bool
* visited)
}return haspath;
}// ********************測試**********************
void
test
(const
char
* testname,
const
char
* matrix,
int rows,
int cols,
const
char
* str,
bool expected)
//abtg
//cfcs
//jdeh
//bfce
void
test1()
//abce
//sfcs
//adee
//see
void
test2()
//abtg
//cfcs
//jdeh
//abfb
void
test3()
//abcehjig
//sfcslopq
//adeemnoe
//adidejfm
//vceifggs
//slhecceidejfggfie
void
test4()
//abcehjig
//sfcslopq
//adeemnoe
//adidejfm
//vceifggs
//sggfiecvaasabcehjigqem
void
test5()
//abcehjig
//sfcslopq
//adeemnoe
//adidejfm
//vceifggs
//sggfiecvaasabceejigoem
void
test6()
//abcehjig
//sfcslopq
//adeemnoe
//adidejfm
//vceifggs
//sggfiecvaasabcehjigqems
void
test7()
//aaaa
//aaaa
//aaaa
//aaaaaaaaaaaa
void
test8()
//aaaa
//aaaa
//aaaa
//aaaaaaaaaaaaa
void
test9()
//a//a
void
test10()
//a//b
void
test11()
void
test12()
intmain
(int argc,
char
* ar**)
《劍指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 的路...