請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。 例如 :
[a s a b;f d c c;e e s e]
矩陣中包含一條字串"bcced"的路徑,但是矩陣中不包含"abcb"路徑,因為字串的第乙個字元b佔據了矩陣中的第一行第二個格仔之後,路徑不能再次進入該格仔。
其實還是佔格仔然後內部迴圈的問題,但我覺得這個比之前那個機械人運動範圍要難,因為每次迴圈時,先前試圖走【上下左右】之前,該格仔(座標)已經標記上1了,在部分字串符合要求,後面還在**的時候,從其他方向跑到這個格仔的可能性就被打斷。這就是倒數第二行那個要設flag[index] = 0的原因(總之它必須得有,不然我python那個樣例就是錯誤的輸出)
# -*- coding:utf-8 -*-
class
solution
:def
haspath
(self, matrix, rows, cols, path)
: flag =[0
for _ in
range
(rows * cols)
]for i in
range(0
, rows)
:#這個範圍是0到rows-1,我開始寫成了rows-1所以總跳出去
for j in
range(0
, cols)
:if self.helper(matrix, rows, cols, path, i, j,
0, flag)
:return
1return
0def
helper
(self, matrix, rows, cols, path, i, j, k, flag)
: index = j + cols * i
if i >= rows or i <
0or j >= cols or j <
0or matrix[index]
!= path[k]
or flag[index]==1
:return
0if k >=
len(path)-1
:return
1 flag[index]=1
if(self.helper(matrix, rows, cols, path, i -
1, j, k +
1, flag)
or\ self.helper(matrix, rows, cols, path, i +
1, j, k +
1, flag)
or\ self.helper(matrix, rows, cols, path, i, j -
1, k +
1, flag)
or\ self.helper(matrix, rows, cols, path, i, j +
1, k +
1, flag)):
return
1 flag[index]=0
# 這裡我一開始以為是多餘的,如果不設回0,當path很長的時候,就不能從其他路徑繞回來,因為部分字元符合要求卻已經在迴圈內把這個格設為了1。
return
0if __name__ ==
'__main__'
: a=solution(
)print
(a.haspath(
"abcehjigsfcslopqadeemnoeadidejfmvceifggs",5
,8,"sggfiecvaasabcehjigqem"
))
#include
using
namespace std;
//這裡的char 是生成與matrix規格相同的空陣列,其實就是占個與matrix一毛一樣的位置
class
solution
;for
(int i =
0; i < rows; i ++)}
}return
false;}
;bool
helper
(char
* matrix,
int rows,
int cols,
int i,
int j,
char
* str,
int k,
int* flag)
// matrix:矩陣 row、cols:矩陣的行列數 i,j檢索矩陣時的座標 str:所要找的字串 k:第k個字串,從0開始找 flag:記錄佔格仔用的序列,大小與matrix相等 ;if
(k ==
strlen
(str)-1
);flag[index]=1
;if(helper
(matrix, rows, cols, i -
1, j, str, k +
1, flag)
||helper
(matrix, rows, cols, i +
1, j, str, k +
1, flag)
||helper
(matrix, rows, cols, i, j -
1, str, k +
1, flag)
||helper
(matrix, rows, cols, i , j +
1, str, k +
1, flag));
flag[index]=0
;return
false;}
;};int
main()
;
這個**我搞了好久,首先是python的從0開始計數的方式還不太熟練;然後c++的指標也忘得差不多了。
我看到牛客有大佬的**運算速度是我的3倍,好像用的是向量,哎,等我之後在對比研究吧。
c++**參考blog:
矩陣中的路徑
請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。例如 3 4 矩陣 a b c e s f c s a d e e 中包...
矩陣中的路徑
題目描述 請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則之後不能再次進入這個格仔。注意 輸入的路徑不為空 所有出現的字元均為大寫英文本母 樣例...
矩陣中的路徑
思路 矩陣如下 abce sfcs adee 找到一條路徑,從矩陣任意頂點出發,設計乙個矩陣,記錄走過的路線為true,下次不能走。每次走的時候匹配路徑元素。若上下左右每個方向都試一遍。每個方向都沒有結果,返回上一級,重置頂點為false。採用遞迴。def haspath self,matrix,r...