jsi6452   2년 전

예제는 맞는데  어디서 틀린건지 도저히 모르겠습니다.

g->h를 거쳐 목적지로 가는 최단거리 ,h->g를 거쳐 목적지로 가는 최단거리가

s->목적지로 가는 최단거리와 같다면, 해당 후보군을 출력하는 형태로 코드를 짰는데,

왜 안되는지 모르겠네요,

s->목적지 == s->g->h->목적지 || s->목적지 == s->h->g->목적지

면 후보군을 출력하는건데

예외 케이스가 뭘까요 뭘 실수한걸까요 미치겠네요

tkdgus0782   2년 전

이문제를 읽어보면, 단순히 g와 h를 지나간것이아니라, 주어진 g와 h사이를 잇는 도로를 지나간 것입니다.

dijkstra(g);
GH = visit[h];
Gtmp = visit[tmp];

dijkstra(h);
Htmp = visit[tmp];
HG = visit[g];

이부분에서 만약 g와  h를 잇는 직통 도로보다 더 짧은 경로가 존재한다면 오답이 나오지 않을까 싶네요!

간선들을 받으면서 g와 h를 잇는 간선의 길이를 저장해놓았다가 사용하면 될듯합니다.

0archlinux0   2년 전

s->g->h->x OR s->h->g->x 경로의 가중치 합 = s->x 을 출력, 두가지의 예외 처리만 해주면 됩니다

Edge case:

1) s == g or s == h

2) x == g or x == h

1의 경우 s에서s로 가는 가중치값을 미리 0으로 초기화,

2의 경우는 g에서 g, h에서 h로 가는 가중치값을 미리 0으로 처리함으로써 해결 할 수 있습니다.


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