gi5005   3년 전

플로이드-와샬 알고리즘을 써서 dst 간선들을 모두 최소값으로 갱신한뒤 

for(int i=1;i<=N;i++) 돌면서 dst[i][i]가 음수인 경우가 있으면 YES 아니면 NO이런 식으로 구현했는데 어디서 틀린건지 모르겠습니다.

playsworld16   3년 전

32, 33, 39줄에 공통적인 오류가 있습니다.

같은 두 지점을 잇는 경로가 여러번 나올 경우, 걸리는 시간에 상관없이 마지막으로 들어온 값을 저장하게 됩니다.

예를 들어 1 2 2 와  1 2 100 이 들어오면 dst[1][2] = 100이 되겠죠.

INF의 값도 문제가 있습니다. 50줄에서 dst[i][k]와 dst[k][j]가 모두 INF라면, dst[i][k] + dst[k][j] = 1987654321 * 2가 되는데, 이 값은 int 범위를 벗어나게 되어 -319658654라는 엉뚱한 값이 됩니다.

만약 dist[i][j]가 이 값보다 크다면 이 값으로 바뀌게 되죠.

gi5005   3년 전

앗 출발이랑 도착이 같은간선이 또 들어올 수 있다는걸 생각하지 못했군요...!  정말 감사합니다...ㅠㅠ

댓글을 작성하려면 로그인해야 합니다.