Есть ли способ увидеть результаты моего кода рекурсии? (может быть какой-то сайт)Python

Программы на Python
Ответить
Anonymous
 Есть ли способ увидеть результаты моего кода рекурсии? (может быть какой-то сайт)

Сообщение Anonymous »

Я решил сегодняшний (25 ноября 2024 г.) вопрос о литкоде, и это было решение BFS, но затем я захотел попробовать рекурсию в коде, и из-за временной сложности O(V!) этот код не сможет вернуться что угодно, пока вселенная не погибнет от жары (что-то вроде 720! лол)
Вот вопрос: https://leetcode.com/problems/sliding-p ... scription/
Есть ли веб-сайт или способ увидеть или посмотреть как отладчик, чтобы я мог понять, работает ли код как предназначено (даже если оно никогда не скомпилируется)?
Вот мой код рекурсии:

from typing import List, Tuple
class Solution:
def slidingPuzzle(self, board: List[List[int]]) -> int:
def to_string(board: List[List[int]]) -> str:
"""Convert the 2x3 board into a string representation."""
return "".join(str(num) for row in board for num in row)

def swap(state: str, i: int, j: int) -> str:
"""Swap characters at index i and j in the string."""
state = list(state)
state, state[j] = state[j], state
return "".join(state)

def dfs(state: str, depth: int) -> int:
if state == target:
return depth

if state in memo:
return float('inf') # State already visited

memo.add(state)
zero_idx = state.index('0')
min_moves = float('inf')

for neighbor in directions[zero_idx]:
new_state = swap(state, zero_idx, neighbor)
moves = dfs(new_state, depth + 1)
min_moves = min(min_moves, moves)

memo.remove(state) # Backtrack
return min_moves

# Target state
target = "123450"

# Convert the board to a string
start = to_string(board)

# Directions based on 2x3 board
directions = [
[1, 3], # Index 0
[0, 2, 4], # Index 1
[1, 5], # Index 2
[0, 4], # Index 3
[1, 3, 5], # Index 4
[2, 4] # Index 5
]

# Memoization to track visited states
memo = set()

# Perform DFS
result = dfs(start, 0)
return result if result != float('inf') else -1

А вот решение BFS в O(V+E)
from typing import List
from collections import defaultdict, deque

class Solution:
def slidingPuzzle(self, board: List[List[int]]) -> int:
def swap(s: str, zero_idx: int, new_idx: int) -> str:
char_arr = list(s)
char_arr[zero_idx], char_arr[new_idx] = char_arr[new_idx], char_arr[zero_idx]
return "".join(char_arr)

target = "123450"
start = "".join(str(board[r][c]) for r in range(len(board)) for c in range(len(board[0])))

visited = set()
directions = [
[1, 3], # Neighbors for index 0
[0, 2, 4], # Neighbors for index 1
[1, 5], # Neighbors for index 2
[0, 4], # Neighbors for index 3
[1, 3, 5], # Neighbors for index 4
[2, 4] # Neighbors for index 5
]

queue = deque([start])
visited.add(start)
res = 0

while queue:
size = len(queue)
for _ in range(size):
curr = queue.popleft()
if curr == target:
return res

zero_idx = curr.index('0') # Find the index of '0'

for dir_idx in directions[zero_idx]: # Valid moves for the zero's position
swapped = swap(curr, zero_idx, dir_idx)
if swapped in visited:
continue
visited.add(swapped)
queue.append(swapped)
res += 1

return -1


Подробнее здесь: https://stackoverflow.com/questions/792 ... site-maybe
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»