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:
댓글 달기