矩陣中的路徑

2021-10-08 19:43:34 字數 3113 閱讀 6672

請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。 例如 :

[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...