upd
This commit is contained in:
38
algorithms/labs/lab8/code/search/1.py
Normal file
38
algorithms/labs/lab8/code/search/1.py
Normal file
@@ -0,0 +1,38 @@
|
||||
def exist(board, word):
|
||||
rows, cols = len(board), len(board[0])
|
||||
visited = set()
|
||||
|
||||
def dfs(r, c, k):
|
||||
if k == len(word):
|
||||
return True
|
||||
if (
|
||||
r < 0
|
||||
or r >= rows
|
||||
or c < 0
|
||||
or c >= cols
|
||||
or (r, c) in visited
|
||||
or board[r][c] != word[k]
|
||||
):
|
||||
return False
|
||||
visited.add((r, c))
|
||||
ok = (
|
||||
dfs(r + 1, c, k + 1)
|
||||
or dfs(r - 1, c, k + 1)
|
||||
or dfs(r, c + 1, k + 1)
|
||||
or dfs(r, c - 1, k + 1)
|
||||
)
|
||||
visited.remove((r, c))
|
||||
return ok
|
||||
|
||||
for r in range(rows):
|
||||
for c in range(cols):
|
||||
if dfs(r, c, 0):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
board = [["A", "B", "C", "E"], ["S", "F", "C", "S"], ["A", "D", "E", "E"]]
|
||||
print(exist(board, "ABCCED"))
|
||||
print(exist(board, "SEE"))
|
||||
print(exist(board, "ABCB"))
|
||||
22
algorithms/labs/lab8/code/search/2.py
Normal file
22
algorithms/labs/lab8/code/search/2.py
Normal file
@@ -0,0 +1,22 @@
|
||||
def search_rotated(nums, target):
|
||||
l, r = 0, len(nums) - 1
|
||||
while l <= r:
|
||||
m = (l + r) // 2
|
||||
if nums[m] == target:
|
||||
return m
|
||||
if nums[m] >= nums[l]:
|
||||
if nums[l] <= target < nums[m]:
|
||||
r = m - 1
|
||||
else:
|
||||
l = m + 1
|
||||
else:
|
||||
if nums[m] < target <= nums[r]:
|
||||
l = m + 1
|
||||
else:
|
||||
r = m - 1
|
||||
return -1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(search_rotated([4, 5, 6, 7, 0, 1, 2], 0))
|
||||
print(search_rotated([4, 5, 6, 7, 0, 1, 2], 3))
|
||||
31
algorithms/labs/lab8/code/search/3.py
Normal file
31
algorithms/labs/lab8/code/search/3.py
Normal file
@@ -0,0 +1,31 @@
|
||||
def search_matrix(matrix, target):
|
||||
if not matrix or not matrix[0]:
|
||||
return False
|
||||
top, bot = 0, len(matrix) - 1
|
||||
while top <= bot:
|
||||
mid = (top + bot) // 2
|
||||
if matrix[mid][0] <= target <= matrix[mid][-1]:
|
||||
row = mid
|
||||
break
|
||||
if target < matrix[mid][0]:
|
||||
bot = mid - 1
|
||||
else:
|
||||
top = mid + 1
|
||||
else:
|
||||
return False
|
||||
l, r = 0, len(matrix[row]) - 1
|
||||
while l <= r:
|
||||
m = (l + r) // 2
|
||||
if matrix[row][m] == target:
|
||||
return True
|
||||
if matrix[row][m] < target:
|
||||
l = m + 1
|
||||
else:
|
||||
r = m - 1
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
matrix = [[1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 60]]
|
||||
print(search_matrix(matrix, 3))
|
||||
print(search_matrix(matrix, 13))
|
||||
Reference in New Issue
Block a user