메뉴 건너뛰기

app

[SPF] Dijkstra 알고리즘 C파일

박영식2007.07.06 21:57조회 수 3722댓글 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
    • 글자 크기
Goodluck (by 박영식) [RSA] FLASH에서 받은 암호문의 복호화 (by 박영식)

댓글 달기

박영식
2007.07.08 조회 2358
박영식
2007.06.14 조회 2633
박영식
2007.04.04 조회 5643
박영식
2007.02.16 조회 2443
박영식
2007.02.15 조회 2638
박영식
2006.09.19 조회 1927
박영식
2006.09.14 조회 1973
박영식
2006.09.09 조회 1903
박영식
2006.09.05 조회 1963
박영식
2006.09.01 조회 1575
첨부 (1)
dijkstra2.zip
532.1KB / Download 108
위로