สมมติว่าเรามีตารางหรือเมทริกซ์ของคำ เราต้องตรวจสอบว่าคำที่กำหนดมีอยู่ในตารางหรือไม่ คำนี้สามารถพบได้ในสี่วิธีในแนวนอนซ้ายและขวาและแนวตั้งขึ้นและลง หากเราหาคำได้ เราก็จะคืนค่า True ไม่เช่นนั้นจะเป็น False
ดังนั้นหากอินพุตเป็นแบบ
p | g | h | s | f |
ย | k | d | g | ช |
t | k | g | ช | ฉัน |
ช | n | s | j | s |
โอ | j | f | g | h |
น | ร | t | ย | คุณ |
input_str ="python" จากนั้นผลลัพธ์จะเป็น True
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน find_grid() สิ่งนี้จะใช้เมทริกซ์, input_str, row_pos, col_pos, row_count, col_count, องศา
- ถ้าระดับเท่ากับขนาดของ input_str แล้ว
- คืนค่า True
- ถ้า row_pos <0 หรือ col_pos <0 หรือ row_pos>=row_count หรือ col_pos>=col_count แล้ว
- คืนค่าเท็จ
- ถ้า matrix[row_pos, col_pos] เหมือนกับ input_str[degree] แล้ว
- อุณหภูมิ :=matrix[row_pos, col_pos]
- แทนที่องค์ประกอบของเมทริกซ์[row_pos, col_pos] ด้วย '#'
- ผลลัพธ์ :=find_grid(เมทริกซ์, input_str, row_pos - 1, col_pos,
- row_count, col_count, degree + 1) bitwise หรือ
- find_grid(เมทริกซ์, input_str, row_pos + 1, col_pos, row_count,
- col_count, องศา + 1) ระดับบิต หรือ
- find_grid(เมทริกซ์, input_str, row_pos, col_pos - 1, row_count,
- col_count, องศา + 1) ระดับบิต หรือ
- find_grid(เมทริกซ์, input_str, row_pos, col_pos + 1, row_count, col_count, องศา + 1))
- แทนที่องค์ประกอบของเมทริกซ์[row_pos, col_pos] ด้วยอุณหภูมิ
- ผลตอบแทน
- มิฉะนั้น
- คืนค่าเท็จ
- ถ้าระดับเท่ากับขนาดของ input_str แล้ว
- จากฟังก์ชัน/วิธีการหลัก ให้ทำดังนี้ −
- ถ้าความยาวของ input_str> row_count * col_count แล้ว
- คืนค่าเท็จ
- สำหรับแถวในช่วง 0 ถึง row_count ให้ทำ
- สำหรับ col ในช่วง 0 ถึง col_count ทำ
- ถ้า matrix[row, col] เหมือนกับ input_str[0] แล้ว
- ถ้า (find_grid(matrix, input_str, row, col, row_count, col_count, 0) เป็น True) ดังนั้น
- คืนค่า True
- ถ้า (find_grid(matrix, input_str, row, col, row_count, col_count, 0) เป็น True) ดังนั้น
- ถ้า matrix[row, col] เหมือนกับ input_str[0] แล้ว
- สำหรับ col ในช่วง 0 ถึง col_count ทำ
- คืนค่าเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def find_grid(matrix, input_str, row_pos, col_pos, row_count, col_count, degree) : if (degree == len(input_str)) : return True if (row_pos < 0 or col_pos < 0 or row_pos >= row_count or col_pos >= col_count) : return Fals if (matrix[row_pos][col_pos] == input_str[degree]) : temp = matrix[row_pos][col_pos] matrix[row_pos].replace(matrix[row_pos][col_pos], "#") result = (find_grid(matrix, input_str, row_pos - 1, col_pos, row_count, col_count, degree + 1) |find_grid(matrix, input_str, row_pos + 1, col_pos, row_count, col_count, degree + 1) |find_grid(matrix, input_str, row_pos, col_pos - 1, row_count, col_count, degree + 1) |find_grid(matrix, input_str, row_pos, col_pos + 1, row_count, col_count, degree + 1)) matrix[row_pos].replace(matrix[row_pos][col_pos], temp) return result else : return False def solve(matrix, input_str, row_count, col_count) : if (len(input_str) > row_count * col_count) : return False for row in range(row_count) : for col in range(col_count) : if (matrix[row][col] == input_str[0]) : if (find_grid(matrix, input_str, row, col, row_count, col_count, 0)) : return True return False word_grid = ["pghsf", "ykdgh", "tkghi", "hnsjs", "ojfgh", "nrtyu"] print(solve(word_grid, "python", 6, 5))
อินพุต
["pghsf", "ykdgh", "tkghi", "hnsjs", "ojfgh", "nrtyu"],"python"
ผลลัพธ์
True