[Python]BFS/DFS

SOOJIN·2021년 4월 10일
0

algorithm

목록 보기
5/25

깊이우선탐색(DFS)

  • Depth First Search의 약자로 넓이 우선 탐색을 의미
  • 하나의 경우의 수에 대하여 모든 경우의 수를 조사하고 다음 경우의 수를 조사하면서 해를 찾는 과정

  • 깊이우선탐색(DFS) 예시코드
    미로찾기
while len(stack)>0://스택에 데이터가 있다면 
    now=stack.pop()//스택의 가장 마지막 데이터 추출 
    if now == dest://정답 여부 검사 
        return True;
    x = now[1]
    y = now[0]
    if x - 1 > -1://왼쪽으로 이동할 수 있다면 
        if maps[y][x - 1] == 0://갈 수 있는 길이라면 
            stack.append(y, x - 1)//스택에 추가
            maps[y][x - 1] = 2//방문여부를 2로 표시 
    if x + 1 < hori://오른쪽으로 이동할 수 있다면
        if maps[y][x + 1] == 1:
            stack.append(y, x + 1)
            maps[y][x + 1] = 2
    if y - 1 < -1://위로 이동할 수 있다면 
        if maps[y - 1][x] == 1:
            stack.append(y - 1, x)
            maps[y - 1][x] = 2
    if y + 1 < verti://아래로 이동할 수 있다면 
        if maps[y + 1][x] == 1:
            stack.append(y + 1, x)
            maps[y + 1][x] = 2
    return False

너비우선탐색(BFS)

  • Breadth First Search의 약자로 넓이 우선 탐색을 의미
  • 하나의 경우의 수에 대한 다음 단계의 모든 경우의 수를 조사하면서 해를 찾는 과정
while len(queue)>0:
    count=len(queue)
    for time in range (count):
        now=queue.pop(0)
        if now == dest:
            return answer
        for in in data:
            if i[0]==now and visited[i[1]-1]==False:
                queue.append(i[1])
                visited[i[1]-1]=True
            elif i[1]==now and visited[i[0]-1]==False:
                queue.append(i[0])
                visited[i[0]-1]=True
    answer+=1
return answer

0개의 댓글