2013-11-15 2 views
2

아래 그림과 같이이 그래프가 표시됩니다. 몇 가지 알고리즘을 검색해 보았지만 그 알고리즘을 이해하는 것이 불가능한 것처럼 솔기를 맺습니다. 실제로는 Floyd–Warshall algorithm을 사용하는 것이 가능하지만 불행히도 (행렬 대신) 스택 만 사용할 수 있습니다. 나도 Dijkstra's algorithm를 찾았다. 그러나 나는 나의 문제와의 관계를 얻을 수 없었다. picture스택을 사용한 가중 그래프의 최단 경로 찾기

명확하게 나의 목표는 모든 을 최단 경로 한 지점에서 다른 지점으로 가져 오는 것입니다. 앞서 언급 한대로 스택에서 벡터 문자열로 솔루션을 출력합니다. 나는 각 노드를 방문해야만하고 내가 가장 두려워하는 것은 검색 중에 루프를 쌓거나 심지어 트랙을 잃어 버리는 것입니다. 또한이 그래프는 이며 방향 그래프는이 아닙니다. Dijkstra의 알고리즘이 여기에 적용 가능하다면, 여러분 중 누군가가 저를 인도한다면 매우 감사 할 것입니다. 검색 중에 루프에 누적되거나 트랙을 잃어 버리지 않기위한 도움, 제안, 아이디어 또는 비전에 대해서 정말로 감사 할 것입니다.

미리 감사드립니다.

+1

http://cs.stackexchange.com/에 더 적합 할 수도 있습니다. – yamafontes

+0

은 가장자리가 가중치가 있습니까? – sukunrt

+0

번호 가중치입니다. – user2878007

답변

1

선택한 노드에서 다른 모든 노드까지의 모든 최단 경로 값을 갖고 싶으면 Dijkstra 알고리즘으로 정상적으로 작동합니다. 기본적으로 BFS가 확장되었습니다. BFS의 아이디어를 얻은 후에는 Dijkstra를 이해하는 데 아무런 문제가 없어야합니다. 실제로는 보다 하나의 queue으로 BFS를 구현하는 것이 훨씬 쉽습니다. stacks을 사용해야하는 공식적인 (학교?) 요구 사항입니까? 그렇다면 다소 이상합니다 ...하지만 여전히 완전히 비효율적 인 방법으로 에뮬레이트 할 수 있습니다 - queue에는 두 개의 stacks이 있습니다.

는 다른 모든 노드에있는 모든 노드에서 모든 모든 최단 경로를 갖고 싶어

, 당신은 단지 각 노드에서 익스트라를 실행하거나 조금 인 당신이 벨만 - 포드를 시도 할 수 있습니다 (BTW. DFS는 스택이 사용하는) 빠르지 만 파악하기가 조금 더 어렵습니다.

단일 노드에서 다른 노드로 최단 경로를 원할 경우 (비트 증가) 양방향 BFS가 최선의 선택입니다.

당신이 실버 라이트 플러그인이있는 경우, 당신은 나에 의해 쓰여진 50 %이 작은 응용 프로그램을 시도 할 수 있습니다 : http://grzesiaka.home.pl/GraphTutor/ 당신이 프레젠테이션 단계별는 (데이터 구조와 의사 코드에 관심이있는 알고리즘을 찾을 것). 바라기를 그것은 당신을 돕는다!

+0

도움 주셔서 대단히 감사합니다. 내가 Dijkstra 알고리즘을 사용하려고 할 것이지만, 방문한 노드를 추적하고 대부분 무한 루프에 들어 가지 않기 때문에 조금 혼란 스럽습니다. – user2878007

+0

방문한 노드를 추적하고 있습니다. 스택을 사용할 수 있지만 여전히 수행 할 수 있습니다. BFS의 가상 코드를보십시오 (실버 라이트를 가지고있는 경우를 대비하여). Btw : 나는 문제를 정상적으로 (어떤 제한없이) 풀려고 노력할 것이고, 이상한 요구 사항을 충족 시키려고 할 것이다. –