메뉴 건너뛰기

app

[SPF] Dijkstra 알고리즘 C파일

박영식2007.07.06 21:57조회 수 3588댓글 0

  • 1
    • 글자 크기

Visual studio 2005에서 test했습니다. project파일로 압축하여 업로딩합니다.
예외처리가 안 되어있습니다.

// dijkstra2.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//


#include <stdio.h>
#include <stdafx.h>


#define n 8
#define m 5000


void main()
{
int data[8][8] = {
{0,2,m,m,m,3,m,m},
{2,0,4,1,m,m,m,m},
{m,4,0,m,3,m,m,m},
{m,1,m,0,3,m,2,m},
{m,m,3,3,0,m,m,4},
{3,m,m,m,m,0,6,m},
{m,m,m,2,m,6,0,4},
{m,m,m,m,4,m,4,0}};



int i, j, k, s, e, min;
int v[8], distance[8];


 // 그래프는 사전에 주어진 그래프를 사용한다. 지금은 예를들어 표기를 한 것임.
 printf("n                   <다익스트라(Dijkstra) 알고리즘>                  n");
 printf("n 주어진 그래프에서 출발점과 도착점을 입력하면 최단거리를 알려줍니다.");
 printf("n +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
 printf("n +                                                                 +");
 printf("n +                         [3]-------3-------[5]                   +");
 printf("n +                          |                / (                   +");
 printf("n +                          |               /   (                  +");
 printf("n +                          4             3      4                 +");
 printf("n +                          |           /         (                +");
 printf("n +                          |          /           (               +");
 printf("n +           [1]-----2-----[2]---1---[4]            [8]            +");
 printf("n +            (                       (            /               +");
 printf("n +              (                       (         /                +");
 printf("n +                3                       2      4                 +");
 printf("n +                 (                       (    /                  +");
 printf("n +                  (                       (  /                   +");
 printf("n +                  [6]----------6-----------[7]                   +");
 printf("n +                                                                 +");
 printf("n +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++n");
////////////////////////////////////////////////////////////////////////////////////


printf("n 시작점을 입력하시오 : ");
scanf("%d", &s);
printf("도착점을 입력하시오 : ");
scanf("%d", &e);


for(j=0; j<8; j++)
{
v[j] = 0;
distance[j] = m;
}


distance[s-1] = 0;


for(i=0; i<8; i++)
{
min = m;
for(j=0; j<8; j++)
{
if(v[j]==0 && distance[j]<min)
{
k = j;
min = distance[j];
}
}


v[k] = 1;


if(min==m) break;


for(j=0; j<8; j++)
{
if(distance[j] > distance[k] + data[k][j])
distance[j] = distance[k] + data[k][j];
}
}
printf(" %d => %d : %d n", s, e, distance[e-1]);
}

박영식 (비회원)
  • 1
    • 글자 크기

댓글 달기

박영식
2008.04.11 조회 2057
박영식
2008.01.20 조회 1906
박영식
2007.12.23 조회 3058
이전 1 ... 5 6 7 8 9 10 11 12 13 14 15다음
첨부 (1)
dijkstra2.zip
532.1KB / Download 98
위로