windows api로 다익스트라 알고리즘 구현하기 질문.
글쓴이: jins8160 / 작성시간: 수, 2016/11/16 - 1:42오후
제가 c랑 알고리즘을 공부해서 c로 다익스트라 알고리즘을 만들어봤는데, 이제 하기 시작한 windows api로도 만들어보고 싶은데 어떻게 해야될지 하나도 모르겠어요 .좀 알려주세요....
#include <stdio.h>
#include <string.h>
#define N 10
#define M 9999
int a[N+1][N+1]={
{0,0,0,0,0,0,0,0,0,0,0},
{0,0,1,M,M,M,M,M,M,M,M},//1
{0,1,0,1,M,M,M,M,M,M,M},//2
{0,M,1,0,1,M,M,M,M,M,M},//3
{0,M,M,1,0,1,M,M,M,M,M},//4
{0,M,M,M,1,0,1,M,M,M,M},//5
{0,M,M,M,M,1,0,1,M,M,M},//6
{0,M,M,M,M,M,1,0,1,M,M},//7
{0,M,M,M,M,M,M,1,0,1,M},//8
{0,M,M,M,M,M,M,M,1,0,1},//9
{0,M,M,M,M,M,M,M,M,1,0}};//10
// 1.2.3.4.5.6.7.8.9.10
typedef struct {
char *state;
int state_num;
}SubType;
SubType subway[N+1]={"null",0,"신평",1,"하단",2,"당리",3,"사하",4,"괴정",5,"대티",6,
"서대신동",7,"동대신동",8,"토성동",9,"자갈치",10};
int main(void)
{
int j,k,p,start,end,min,i=0,count=0,
leng[N+1], // 정점까지의 거리
v[N+1], //확정 플래그
index[N+1];
start=subway[1].state_num; // 시작점 입력
for(k=1;k<=N;k++) // 초기화
{
leng[k]=M;
v[k]=0;
}
leng[start]=0; /* 시작점은 표시하지 않는다 */
index[start]=0;
for(j=1;j<=N;j++)
{
min=M;
for(k=1;k<=N;k++) // 최단거리 정점을 찾는다
{
if(v[k]==0 && leng[k]<min)
{
p=k;
min=leng[k];
}
}
v[p]=1; // 최소인 정점을 확정
if(min==M)
{
printf("그래프가 연결되어 있지 않다\n");
return 1;
}
// p를 경유해서 k에 이르는 거리가 지금까지의 최단 경로보다 작으면 갱신
for(k=1;k<=N;k++)
{
if((leng[p]+a[p][k])<leng[k])
{
leng[k]=leng[p]+a[p][k];
index[k]=p;
}
}
}
for(j=2;j<=N;j++) // 도착 경로 출력 함수
{
p=j;
while(index[p]!=0)
{
printf("%s -> ",subway[index[p]].state);
p=index[p];
}
printf("\n");
}
return 0;
}Forums:


댓글 달기