일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- commited
- staged
- 백준
- HTTP
- 비동기
- 파핑파핑지뢰찾기
- 17822
- graph
- react
- JSP
- 달팽이는올라가고싶다
- 알고리즘
- 17471
- JavaScript
- 타겟넘버
- web
- 1868
- 응답코드
- Ajax
- Git
- SOCKET
- SWEA
- GitHub
- node.js
- 소형기관차
- 카카오코드페스티벌
- Java
- 2869
- boj
- npm
- Today
- Total
devlog
[BOJ] 백준 11403 경로찾기-java 본문
문제:https://www.acmicpc.net/problem/11403
풀이
반향그래프의 한 점에서 임의의 점을 갈 수 있는 경로가 있는지 판별하는 문제입니다.
한 정점에서 갈 수 있는 길은 인접행렬형태로 입력받기 때문에 정점 a에서 갈 수 있는 모든 정점을 찾으려고 할 때 a에서 연결된 정점이 c,d라고 가정해봅시다.
a는 a와 연결된 c,d에 갈 수 있고 c와 연결된 e라는 점에도 갈 수 있습니다.
a-c-e 이러한 경로가 존재하기 때문이죠.
이러한 방법으로 갈 수 있는 정점을 모두 찾으려고 할 때 너비 우선 탐색(BFS, Breadth-First Search) 알고리즘을 쓰는 방법이 있습니다.
너비우선 탐색에 대한 설명은 아래 참고할만한 블로그 링크를 남기겠습니다.
일단 한 정점에서 갈 수 있는 경로가 존재하는 정점들을 인접행렬에 1로 표시해야 하기때문에 한 행씩 접근합니다.
한 행에 있는 1의 개수는 그 점과 인접한 정점의 개수이므로 그 정점을 큐에 넣습니다.
그 후 큐에 있는 데이터를 빼서 BFS 메소드에 넣는데 뺀 데이터의 행을 검사해서 1인 정점을 또 큐에 넣는 작업입니다.
이렇게 결국 한 정점에서 갈 수 있는 경로를 다 찾는데 만약 찾은 정점이 이미 i라는 정점에서 갈 수 있는 점(인접행렬에 1이라고 표시)이라고 표시되어 있으면 그 정점은 큐에 넣지 않습니다.
큐에 넣게 되면 갔던 경로를 무한히 돌게 되어 무한루프를 돌 수 있습니다.
그렇게 모든 정점에 대해서 BFS를 하면 경로찾기 행렬이 완성됩니다.
BFS란? https://gmlwjd9405.github.io/2018/08/15/algorithm-bfs.html
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 백준 2252 줄세우기-java (0) | 2019.03.21 |
---|---|
[BOJ] 백준 2583 영역구하기-java (0) | 2019.03.18 |
[BOJ] 백준 15954 인형들(카카오코드페스티벌)-java (1) | 2019.03.10 |
[BOJ] 백준 10250 ACM호텔-java (395) | 2018.12.05 |
[BOJ] 백준 1193 분수찾기-java (350) | 2018.12.04 |