choah76   1년 전

다익스트라알고리즘은 동일하나 답이 없는 경우 -1을 출력하는 부분을 다르게 했더니 하나는 맞고 하나는 틀렸습니다.

두 코드가 제가보기에는 동일한 출력을 내놓는 것 같은데 하나는 맞고 하나는 틀렸습니다.

무엇이 다른것인가요?

답이 없는 경우(해당 경로의 거리가 초기값 INF 그대로인 경우) 경로의 거리가 INF 이상이 되기에 

1->v1->v2->N 또는 1->v2->v1->N 경로의 거리가 INF 이상이 될 경우(모든 경로의 거리는 0 이상이므로) 답이 없다고 판단, -1을 출력하도록 했습니다.

choah76   1년 전

전체 코드입니다. 59번째 줄부터 맞는 코드와 틀린 코드의 차이가 본문과 같이 달라집니다.

yhj1937   1년 전

다음 예시를 생각해보세요.

choah76   1년 전

간선이 존재하지 않는 그래프에서는 틀린 코드의 경우, INF=987654321을 3번 더하게 되니까 (ret1[v1] + ret3[v2] + ret2[v2]) 

C++의 INT 범위를 넘어가서 출력이 -1332004333으로 나오게 되고, 따라서 틀리게 되는 것이었군요

감사합니다!

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