티스토리 뷰
#include <stdio.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("\n 도착점을 입력하시오. : ");
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("\n %d에서 출발하여, %d로 가는 최단 거리는 %d입니다.\n\n", s, e, distance[e-1]);
}
출처 : http://blog.naver.com/dioxin132?Redirect=Log&logNo=20054640
'기억하자정보 > 알고리즘' 카테고리의 다른 글
[알고리즘] C로 구현한 다익스트라 최단경로.. (1) | 2006.12.07 |
---|---|
최단경로 알고리즘 C++로 작성 (0) | 2006.12.07 |
최단거리 알고리즘 참고 사이트 (0) | 2006.12.07 |
최단경로 알고리즘 (0) | 2006.12.07 |
그래프의 최단거리 알고리즘 (0) | 2006.12.07 |
- 안내
- 궁금한 점을 댓글로 남겨주시면 답변해 드립니다.