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]);
}
댓글 달기