위상 정렬 예제 - 3
문제 분석
손으로 풀어보기
슈도코드
n(도시 수) m(도로 수)
A(인접 리스트) reverseA(역방향 인접 리스트)
inDegree(진입 차수 리스트)
for m 반복:
인접, 역방향 인접 리스트 데이터 저장
진입 차수 리스트 저장
시작 도시, 도착 도시 데이터 입력
큐 생성
출발 도시 큐 삽입
result(결과)
while 큐가 빌 때까지:
큐에서 현재 노드 가져오기
for 현재 노드에서 갈 수 있는 노드:
다음 노드 진입 차수 1 감소
result[다음 노드] = max(다음 노드 경로, 현재 노드 경로 + 도로 시간 값)
if 다음 노드 진입 차수가 0이면:
큐에 다음 노드 추가
count(1분도 쉬지 않고 달려야 하는 도로의 수)
visit(방문 처리 리스트)
도착 도시 큐 삽입
도착 도시 방문 처리
while 큐가 빌 때까지: # 역방향 인접 리스트
큐에서 현재 노드 가져오기
for 현재 노드에서 갈 수 있는 노드:
if result[다음 노드] + 도로를 걸리는 데 지나는 시간(에지) == result[now]:
count 증가
if 미방문 도시:
visit 방문 처리
큐에 다음 노드 추가
만나는 시간(result[도착 도시]) 출력
count 출력코드 구현 - 파이썬
코드 구현 - 자바
Last updated