모두의 알고리즘 with 파이썬 다섯째 마당 응용 문제
문제 16. 미로 찾기 알고리즘
1. 그래프로 모델링
그림 생략..
2. 딕셔너리
maze = {
"a" : ["e"],
"e" : ["a", "i"],
"i" : ["e", "m"],
"m" : ["i", "n"],
"n" : ["j", "m"],
"j" : ["n", "f", "k"],
"f" : ["b", "g", "j"],
"b" : ["f", "c"],
"c" : ["b", "d"],
"d" : ["c"],
"g" : ["f", "h"],
"h" : ["g", "l"],
"l" : ["h", "p"],
"p" : ["l"],
"k" : ["j", "o"],
"o" : ["k"]
}
3. 출구 탐색 알고리즘
입력 : maze, 출발점 start, 도착점 end출력 : a e i m n j f g h l p(a -> p의 최단 경로)- 지나온 경로를 문자열에 저장(way += i 이용?)
반복을 하다가 종료 조건(?) p가 나오면 끝낸다. cf) 문제 15. 그래프 탐색 알고리즘
def find_frs(a, x):
qu = []
done = set()
qu.append(x)
done.add(x)
while qu:
value = qu.pop(0)
print(value)
for i in a[value]:
if i not in done:
qu.append(i)
done.add(i)
print(find_frs(maze, 'a'))
#출력값은 : aeimnjfkbgochdlp 음.. 어떻게 바꾸지..
def find_frs(a, start, end):
qu = []
done = set()
qu.append(start) #qu = [start]
done.add(start) #done = {start}
way = start #way = "start"
while qu: #qu에 남아있는 동안
if end in qu: #종료 조건을 만들어준다.
return way
value = qu.pop()
for i in a[value]:
if i not in done:
way += i
qu.append(i)
done.add(i)
#이 상태에서는 불필요한 'kob'가 way에 있음.
print(find_frs(maze, "a", "p"))
모르겠다...
#예제 코드
def solve_maze(maze, start, end):
qu = []
done = set()
qu.append(start)
done.add(start)
while qu:
p = qu.pop(0)
v = p[-1]
if v == end:
return p
for x in maze[v]:
if x not in done:
qu.append(p+x)
done.add(x)
return "?"
print(solve_maze(maze, "a", "p"))
'Computer Science > 알고리즘' 카테고리의 다른 글
[4.17] 문제 18. 최대 수익 알고리즘 (0) | 2021.04.17 |
---|---|
[4.17] 문제 17. 가짜 동전 찾기 알고리즘 (0) | 2021.04.17 |
[4.17] 문제 15. 친구의 친구 찾기 - 그래프 (0) | 2021.04.17 |
[4.16] 문제 14. 동명이인 찾기(딕셔너리) (0) | 2021.04.16 |
[4.16] 문제 13. 회문 찾기(큐와 스택) (0) | 2021.04.16 |