다익스트라 같은경우는 최소값 갱신해주는건데
1->2->3 비용이 10인데
1->4->3 비용이 5면 갱신되야대는데 check배열 쓰면 이게 안되지않나요??
1504번 - 특정한 최단 경로
제 코드를 보면
if (dist[nx] > dist[fx] + cost) {실제로 큐를 이용하지 않고 다익스트라 구현할때,
for (int i = 1; i <= n; i++) {
dist[i] = INF;
}
dist[start] = 0;
for (int k = 0; k < n - 1; k++) {
int m = INF + 1;
int x = -1;
for (int i = 1; i <= n; i++) { // node 선택
if (dist[i] < m && check[i] == false) {
m = dist[i];
x = i;
}
}
check[x] = true;
for (int i = 0; i < v[x].size(); i++) {
int next = v[x][i].first;
int cost = v[x][i].second;
if (dist[next] > dist[x] + cost) dist[next] = dist[x] + cost;
}
}
이부분에서 check써서 node 선택하는것이랑 제코드랑 다를바가 없다고 생각했거든요.
무슨차이가 있는지 이해가 안가서요 ㅜ
댓글을 작성하려면 로그인해야 합니다.
spring2 3년 전 1
//로 되어있는곳(25, 26번째 줄)을 // 처리해서 제출하니 바로 통과했는데 이유를 모르겠습니다.
애초에 25,26번째 줄이 있으나 없으나 우선순위 큐를 사용하기 때문에 왔던곳에 다시 계산할 일이 안생길꺼같은데..
왜이런거죠??
https://www.acmicpc.net/source...
다른 문제 비슷한 문제의 이 소스를 참고하여 풀었는데 문제의 어떤점이 달라서 check를 사용하면 안되는지 모르겠어요 ㅜㅜ.