본문 바로가기

알고리즘2

BFS : 너비 우선 탐색 (Java) 너비 우선 탐색 또한 그래프 탐색 이론이다. 깊이 우선 탐색과의 차이점은, BFS는 현재 노드 기준 가장 가까운 노드들을 모두 거치고 지나간다. 특징으로는 1번, 재귀적으로 작동하지 않는다. 2번, 노드에 방문했던 사실을 체크해줘야 한다. 3번, 동일 깊이의 노드들을 선입선출을 기반으로 하는 큐에 넣어두었다가 사용한다. 이런 순서로! 엄밀히 말하면 같은 깊이의 노드들을 한 번에 처리하는 것은 아니지만. 똑같이 인접 행렬로 구현한다. 알고리즘을 정렬해보면: 1. 시작 노드의 번호를 큐에 넣는다. 2. 큐에 있는 노드를 꺼낸다. 3. 해당 노드와 연결되어 있는 노드들 중에 방문하지 않은 노드들을 큐에 넣는다. 4. 큐가 비어있지 않으면 2~4번을 반복한다. 코드로 한 번 구현해보자. import java.u.. 2021. 10. 7.
DFS - 깊이 우선 탐색 (Java) 10월 9일 예정인 ICPC 학교 예선을 대회 약 한 달 전인 9월 초중반 즈음에 나가기로 했다... 알고리즘의 알 자도 모르는 나였지만 일단 갖다 박아보는거지!! 라는 마인드로 똑같은 마인드의 팀원들을 구해서 준비를 했다 ㅎㅎㅎ 공부할수록 어렵고 복잡함을 느끼지만 오기도 생기고 재미도 붙어서 올해는 경험삼아 도전해보고, 내년에 제대로 공부하고 해보고 싶어졌다. 공부한 것을 정리하기 위해! 포스팅을 한다. DFS(깊이 우선 탐색)은 가중치가 없는 그래프에서의 경로를 찾는 방법이다. 왜 깊이 우선이냐면 한 경로를 찍고 끝까지 내려갔다가 돌아오기 때문! 그래서 재귀적으로 움직이는 것이 특징이다. 장점은 구현하기 쉽다! 그리고 저장 공간을 적게 먹고, 목표 노드가 깊게 있다면 그를 빨리 구할 수 있다. 반대로.. 2021. 10. 7.