다익스트라 알고리즘 에러좀 수정해주세요
찰스
최단경로와 최단거리를 구하는 알고리즘 인데요...
실행시키면 에러는 안나는데요...
최단경로랑 최단거리가 잘못나오거든요..
수정좀 해주세요
#include stdio.h
#define n 7
#define x 1000
void min_path(int W[7][7], int touch[7], int length[7]);
// 인접한 역의 거리를 나타낸 행열
// W[a][b] = 정점a에서 정점b 까지의 거리
// a, b가 직접 연결되있지 않으면 x값을 준다.
int W[7][7] = {
{0,11,9,x,3,x,x},
{x,0,x,x,6,x,30},
{x,x,0,x,19,12,x},
{x,x,x,0,x,x,21},
{x,x,4,16,0,21,44},
{x,x,x,x,x,0,8},
{x,x,x,x,x,x,0}};
// 역이름
char *s[7]={ [0] , [1] , [2] , [3] , [4] , [5] , [6] };
void main()
{
printf( . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . .\n);
printf( . Dijkstra 알고리즘 .\n);
printf( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n);
printf( . .\n);
printf( . [2] . . . . . .12 . . . . . [5] .\n);
printf( . .^ ^. . . ^ . .\n);
printf( . . . . . . .\n);
printf( . 9. 4. .19 21. .18 .\n);
printf( . . . . . . .\n);
printf( . . . . .\n);
printf( . [0]. . . . 3. . . . [4]. . . .44 . . . . . . [6] .\n);
printf( . . ^ . . ^ .\n);
printf( . . . . . . .\n);
printf( . . . . 16 . . .\n);
printf( . 11 . . . . .\n);
printf( . . 6. . . . 21 .\n);
printf( . . . . 30 . . .\n);
printf( . . . . .\n);
printf( . [1]&nbsbsp; [3] .\n);
printf( . .\n);
printf( . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\n);
int i;
// length[i] = start(출발점)에서 i번째 정점까지의 최단거리
// touch[i] = start정점부터 i번째 정점으로 가는 최단경로에서 i번째 경로의
// 바로 전 정점의 번호
int length[7],touch[7];
//역이름 출력
for(i=0;i7;i++)
printf(%s,s[i]);
//최단 경로를 구하는 함수 호출
min_path(W, touch, length);
}
//최단 경로를 구하는 함수
void min_path(int W[7][7], int touch[7], int length[7]){
int i, vnear, start, end, step, min_length;
//Y[i]=i번째 정점이 체크 되었는지 나타냄
int Y[7];
//배열 Y를 0으로 초기화
for(i=0; i7; i++){
Y[i] = 0;
length[i] = x;
}
//출발역과 도착역 저장
printf(\n출발점 : );
scanf(%d, &start);
printf(도착점 : );
scanf(%d, &end);
//시작점을 0으로 표시
length[start-1] = 0;
for(step=1; step=7; step++){
min_length = x;
for(i=0; i7; i++){
if(Y[i]==0 && length[i]min_length){
// vnear = 현재 length배열에 있는것중 값이 가장적은것이며 채크 안된거
vnear = i;
min_length = length[i];
}
}
Y[vnear] = 1;
for(i=1; i7; i++){
//length[i]보다 length[vnear] + W[vnear][i]가 작으면 갱신
if(length[i] length[vnear] + W[vnear][i]){
length[i] = length[vnear] + W[vnear][i];
touch[i]=vnear;
}
}
}
//경로를 찍어주는 부분
int path[7], path_cnt=0;
vnear=end;
while(1)
{
path[path_cnt++]=vnear;
if(vnear==start-1) break;
vnear=touch[vnear];
}
printf(\n최단 경로는 : );
for(i=path_cnt-1;i=1;i--)
printf(%s - ,s[path[i]]);
printf(%s 입니다.,s[path[i]]);
printf(\n(%s)에서 출발하여, (%s)(으)로 가는 최단 거리는 %d입니다.\n\n, s[start], s[end], length[end-1]);
}
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692483 | C언어 함수, Header | 떠나간그놈 | 2025-04-23 |
2692451 | 이 문제좀 풀어주세요 ^^ | 게자리 | 2025-04-23 |
2692424 | 2차원배열 자료입력질문이요! (1) | 똘끼 | 2025-04-22 |
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |