메뉴 건너뛰기

app

[SPF] Dijkstra 알고리즘 C파일

박영식2007.07.06 21:57조회 수 3791댓글 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 조회 2423
박영식
2007.06.14 조회 2698
박영식
2007.04.04 조회 5714
박영식
2007.02.16 조회 2500
박영식
2007.02.15 조회 2701
박영식
2006.09.19 조회 1987
박영식
2006.09.14 조회 2050
박영식
2006.09.09 조회 1973
박영식
2006.09.05 조회 2027
박영식
2006.09.01 조회 1640
첨부 (1)
dijkstra2.zip
532.1KB / Download 115
위로