728x90
반응형

728x90
🙆♂️ 우선순위 큐
"""
우선순위 큐
"""
class PQueue:
def __init__(self):
self.items = []
def emt(self):
return len(self.items)==0
def size(self):
return len(self.items)
def enqueue(self, item):
self.items.append(item)
def dequeue(self):
if not self.emt():
maxI = 0
high = self.items[maxI][2]
for i in range(1,self.size()):
if self.items[i][2] > high:
high = self.items[i][2]
maxI = i
return self.items.pop(maxI)
미로 탐색을 위해 살짝 변경된 우선순위 큐입니다.
🙋♂️ 우선순위 미로 탐색
"""
우선순위 큐를 이용한 미로 탐색
"""
#미로 정의
maze = [[1,1,1,1,1,1],
['H',0,1,0,0,1],
[1,0,0,0,1,1],
[1,0,1,0,1,1],
[1,0,1,0,0,'X'],
[1,1,1,1,1,1]]
goalPos = (5,4) #출구
def dis(x,y):
return -((goalPos[0]-x)**2 + (goalPos[1]-y)**2)**(1/2)
#미로 출력
def print_maze(maze):
print("=====MAZE=====")
for r in maze:
for p in r:
print(p, end=" ")
print()
print("==============")
road = PQueue()
road.enqueue( (0,1,dis(0,1)) )
print("Start : ")
while not road.emt():
here = road.dequeue()
print_maze(maze)
print(here,end=" >> \n")
x,y,d=here
if maze[y][x] == 'X':
break
else:
maze[y][x] = "v"
#탐색 알고리즘
if maze[y-1][x] in (0,'X'): #상
road.enqueue((x,y-1,dis(x,y-1)))
if maze[y+1][x] in (0,'X'): #하
road.enqueue((x,y+1,dis(x,y+1)))
if maze[y][x+1] in (0,'X'): #우
road.enqueue((x+1,y,dis(x+1,y)))
if maze[y][x-1] in (0,'X'): #좌
road.enqueue((x-1,y,dis(x-1,y)))
다른 미로 탐색과는 다르게 빠릅니다.
728x90
반응형
'코딩테스트 > 알고리즘&자료구조' 카테고리의 다른 글
[자료구조] 트리 - 일반 트리, 이진 트리, 결정트리, 힙 (0) | 2022.12.20 |
---|---|
[자료구조][파이썬으로 쉽게 풀어쓴 자료구조] 05 큐 문제풀기 (0) | 2022.10.25 |
[자료구조] 큐 - BFS 미로 탐색 (0) | 2022.10.25 |
[자료구조] 큐 - 선형 큐, 원형 큐, 덱 (0) | 2022.10.25 |
[자료구조][파이썬으로 쉽게 풀어쓴 자료구조] 04 스택 문제풀기 (0) | 2022.10.24 |