기타

가중치가 음수인 간선이 존재하는 다이그래프에서 다익스트라 알고리즘을 이용한 문제 해결

ba

bakod
답변 대기중
30 XP

사진과 같이 S에서 D로 가야하는 다이그래프가 존재하는데, 여기서 B,D 간선이 음수의 가중치를 가지고 있고, 문제에서는 다익스트라 알고리즘을 이용해서 각 단계에 맞춰서 어떻게 알고리즘이 작동하는지 적으라는데 총 배열 3개를 이용합니다.
distance : 지금까지 발견한 최단 경로의 가중치 합을 저장한다.
found : 최단경로가 결정되었는지 여부를 판별.
pi : 최단 경로 비용을 줄인 노드 id 저장.

이런식으로 되어있는데. 각 배열은 index 5까지 총 6개를 저장가능하고
step 1(init) 부터 시작해서 step 5까지 나와있습니다.

여기서 제가 궁금한건 다익스트라 알고리즘은 간선의 가중치가 음수가 있으면 제대로 작동하지 않는다고 알고있는데, 그럼 이문제에서는 제대로 작동하지 않겠지만 그 과정을 작성하라는 것으로 보이는데 이렇게 풀었을때 (S:0, A:1, B:2, C:3, D:4, E:5)

Step 1 (initialization)

distance

0 1 2 3 4 5

0 1 inf 2 inf inf

found

0 1 2 3 4 5

1 0 0 0 0 0

pi

0 1 2 3 4 5

0 0 -1 0 -1 -1

Step 2 (A로 확장)

distance

0 1 2 3 4 5

0 1 7 2 inf inf

found

0 1 2 3 4 5

1 1 0 0 0 0

pi

0 1 2 3 4 5

0 0 1 0 -1 -1

Step 3 (C로 확장)

distance

0 1 2 3 4 5

0 1 7 2 5 inf

found

0 1 2 3 4 5

1 1 0 1 0 0

pi

0 1 2 3 4 5

0 0 1 0 3 -1

Step 4 (B로 확장)

distance

0 1 2 3 4 5

0 1 7 2 5 9

found

0 1 2 3 4 5

1 1 1 1 0 0

pi

0 1 2 3 4 5

0 0 1 0 3 2

여기서 문제가 좀 헷갈리는데

Step 5 (B에서 D로 확장)

distance

0 1 2 3 4 5

0 1 7 2 4 9

found

0 1 2 3 4 5

1 1 1 1 1 0

pi

0 1 2 3 4 5

0 0 1 0 2 2

Step 4까지는 어찌어찌 진행했는데 Step 5에서 B를 D 혹은 E로 가야하는데 E까지 found를 1로 만들려면 Step 6가 있어야 하지 않나 라는 생각을 했는데 애초에 문제부터 좀 이상하더라고요.

**"음수의 가중치"**를 가진 **"다이 그래프"**에서 **"다익스트라 알고리즘"**을 쓴다는게 이해가 안되더라고요. 그래서 전혀 어떻게 써야할지 감이 안잡혀서 물어봅니다.

궁금한점 요약

  1. 음수 가중치를 가진 간선이 있는 다이 그래프에서 다익스트라 알고리즘을 쓸수 있는지
  2. 사용은 가능하더라도 어떤식으로 나타내야하는지
  3. 일단 지금 적은대로 하는게 맞는지

아무튼 질문조차도 갈피를 못잡겠습니다. 문제가 잘못됐나 싶었는데 아무리 해석해도 틀린점은 없네요.


불러오는 중...