다익스트(dijkstra)라 알고리즘으로 최단경로 구하기
2013. 6. 9. 09:36ㆍ프로그래밍/C/C++
#include <stdio.h>
#define M 9999
#define N 5
int map[N][N] = {
{0,1,M,1,M},
{0,5,M,1,M},
{7,M,0,4,M},
{M,2,M,0,1},
{5,M,5,M,0}
};
int dist[N];
int v [N];
int* dijkstra(int start);
int main()
{
int i,j;
for(i=0 ; i<N ; i++)
{
dijkstra(i);
for(j=0 ; j<N ; j++)
{
printf("Start: %d End: %d Distance: %d", i, j, dist[j]);
}
}
}
int* dijkstra(int start)
{
int i, j, mins, back;
for(i=0 ; i<N ; i++)
{
v[i] = 0;
dist[i] = M;
}
dist[start] = 0;
for(i=0 ; i<N ; i++)
{
mins = M;
for(j=0 ; j<N ; j++)
{
if((v[j]==0)&&(dist[j]<mins))
{
back = j;
mins = dist[j];
}
}
v[back] = 1;
for(j=0 ; j<N ; j++)
{
if(dist[back]+map[back][j]<dist[j])
{
dist[j] = dist[back] + map[back][j];
}
}
}
return dist;
}
'프로그래밍 > C/C++' 카테고리의 다른 글
레지스트리 등록하는 코드 (시작프로그램으로 등록) (0) | 2013.06.24 |
---|---|
VisualStudio 관리자 권한으로 프로그램 실행하도록 설정하기 (0) | 2013.06.23 |
[논리적 사유연습]재귀함수를 이용한 숫자 역순으로 출력 / Factorial 구하기 (0) | 2013.06.03 |
[논리적 사유연습]구조체 (0) | 2013.06.03 |
[논리적 사유연습]선택정렬, 버블정렬, 삽입정렬 (0) | 2013.05.27 |