Я решил сегодняшний (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
Есть ли способ увидеть результаты моего кода рекурсии? (может быть какой-то сайт) ⇐ Python
Программы на Python
1732524971
Anonymous
Я решил сегодняшний (25 ноября 2024 г.) вопрос о литкоде, и это было решение BFS, но затем я захотел попробовать рекурсию в коде, и из-за временной сложности O(V!) этот код не сможет вернуться что угодно, пока вселенная не погибнет от жары (что-то вроде 720! лол)
Вот вопрос: https://leetcode.com/problems/sliding-puzzle/description/
Есть ли веб-сайт или способ увидеть или посмотреть как отладчик, чтобы я мог понять, работает ли код как предназначено (даже если оно никогда не скомпилируется)?
Вот мой код рекурсии:
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[i], state[j] = state[j], state[i]
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79222300/is-there-a-way-to-see-results-of-my-recursion-code-some-sort-of-website-maybe[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия