Dijkstra 알고리즘에서 어디를 지나갔는지 알고 싶은데요~

tyolee83의 이미지

Dijkstra 알고리즘을 수행하여 최단경로를 구하는 네비게이션 시뮬레이션을 만드는 중입니다.

각 노드마다 체크박스를 두어 최단경로가 형성되는 노드들에

체크박스를 활성화 시키려 하는데요,

Dijkstra 알고리즘만 따라서 구현했더니

최종 결과값만 있고, 중간에 어딜 거칠지 못찾겠네요 ㅠㅠ

아래에 제가 구현한 Dijkstra 알고리즘인데

어느부분에서 지나가는 경로의 노드를 알수 있을지

조언좀 부탁드립니다.

그리고 코드를 이쁘게 붙이는 방법이 뭐 있었던것 같은데, 뭐였죠;;

오랜만에 KLDP에 와서요 ㅠㅠ

그것도 알려주세요 :)

답변에 미리 감사드립니다~

            for (int i = 0; i < MatrixSize; i++)
            {
                v[i] = 0; //방문상태 초기화
                  distance[i] = m;  //거리에 전부 최대값 대입
              }
            distance[s - 1] = 0;    //자기자신의 거리는 0
 
            for (int i = 0; i < MatrixSize; i++)
            {
                min = m;
                for (int j = 0; j < MatrixSize; j++)
                {
                    if (v[j] == 0 && distance[j] < min)
                    {
                        k = j;
                        min = distance[j];
                    }
                }
                v[k] = 1;
 
                if (min == m)
                {
                    //Not Connected
                }
 
                for (int j = 0; j < MatrixSize; j++)
                {
                    if (distance[k] + Graph[k, j] < distance[j])
                    {
                        distance[j] = distance[k] + Graph[k, j];
                    }
                }
 
            }
winner의 이미지

[, ] 에서 각괄호(angle braket) 으로 바뀌었습니다.
일반 HTML 과 같죠. login 하기 전에 게시판을 열면 밑에 설명이 있습니다.
code 가 어지러우면 보고 싶지가 않군요.

fibonacci의 이미지

글쓴님께서 작성한 알고리즘이 맞는지는 확인 안했어요.... 따라서 알고리즘은 알아서 체크하시고요.

조언을 하자면,

Dijkstra 알고리즘은 매 Iteration당 시작점을 제외한 모든 점의 lable이 "변경"가능한 임시 label이기 때문에 최단 경로 그 자체를 저장하는것이 까다롭습니다.

굳이 Dijkstra 알고리즘을 써야 하겠다면, 매 Iteration 마다 시작점에서 lable이 붙여진 모든 점까지의 경로를 기억하게 해야 합니다.

따라서 각 점의 lable을 나타내는 변수 distance[k] 로는 모자라고,

시작점에서 점 k까지의 최단 경로를 저장해 주는 path[k]라는 변수? (사실상 파이썬의 리스트같은) 자료구조가 또 있어야 겠네요.

그래서 점 k에서 인접한 점들을 보다가 점 j의 lable을 변경하는 부분 바로 다음에
(distansk[j]를 갱신해 주는 부분)

path[j] = path[k] 에 (k와 j를 잇은 모서리)를 추가함

형태로 distanse[k]를 갱신해주는 곳 (k번째 꼭지점의 lable을 갱신해주는 곳 맞지요?)

다음에 삽입하시면 됩니다.

실행이 끝나고 path[종착점]을 보시면 되겠지요.

-----------------------
No Pain, No Gain.

No Pain, No Gain.

winner의 이미지

http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200403030004
알고리즘(3/E) : Foundations of Algorithms USING C++ PSEUDOCODE
Neapolitan 교수의 책인데 예전에 2판을 조금 읽었을 때 원하시는 것이 나오더군요.

path 를 이차원배열로 선언하고 재귀적인 행태로 정보를 저장함으로써 나중에 재귀호출로 찾아냅니다.
Dijkstra algorithm 의 time complexity 를 증가시키지 않기 때문에 좋더군요.

학생이시라면 도서관에서 빌리실 수 있겠죠.

Shani, Horowitz, Anderson-Freed 의 'C로 쓴 자료구조론'에서는 경로구하는 것은 아마 연습문제일겁니다.

puresupe의 이미지

미쿡은 왜케 책값이 비쌀까요.
말이 되요?200불이라니

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.