다익스트라 알고리즘 경로출력
에드가
질문 제목 : 다익스트라 알고리즘 경로 출력다익스트라 알고리즘 경로에 관한 소스를 짯는데 경로를 출력하는 부분에서 많이 막히네요 ㅠ
길을 찾고 가장 가중치가 작은 경로를 찾는거 까지 했는데 그 이후에 그 경로를 출력하는 부분이;;;질문 내용 : 뭐 간단하게 소스로 올리겠습니다.
void searchpath()
{
//입력: (없음)
//기능: graph에 존재하는 각 vertex를 shortestpath()의 파라메터로 이용하여 해당 vertex에서 다른 vertex로의 shortestpath를 찾는다
//출력: (없음)
//calling: shortestpath(), printpath()
//called: makegraph()
//기타: 자기 자신에 대한 path이거나 다른 vertex로의 path가 존재 하지 않는 경우에는 shortestpath()를 수행하지 않음
int i,j;
for(i=0;itotalvertex;i++){//vertex 수만큼 반복
printf(\n\nsource vertex: %d\n, i);
fprintf(out, \nsource vertex: %d\n, i);
shortestpath(i);//가장 짧은 경로 찾음
for(j=0;jtotalvertex;j++){
if(i!=j){
printpath(j);//경로 출력
printf(\n);
}
}
}
}
void printpath(int vertex)
{
//입력: (없음)
//기능: path[]에 저장된 값을 이용하여 찾아진 shortestpath를 출력한다.
//calling: printpath()
//called: searchpath()
//기타: 재귀함수로 구현한다
//(base case: 해당 vertex로의 path가 존재하지 않는 경우.)
if(!path[vertex])
printf(%d -, path[vertex]);
}
void shortestpath(int vertex)
{
//입력: vertex - source vertex for finding shortest path
//기능: 입력받은 vertex에서 다른 모든 vertex로의 shortest path를 찾는다.
//출력: (없음)
//calling: initarray(), choose()
//called: searchpath()
//기타:
//수행하기 전에 initarray()를 호출하여 found[], distance[], path[]를 초기화
//source vertex 자신은 이미 찾아진 vertex이므로 해당하지 않으며 마지막
//vertex는 자동으로 추가되므로 totalvertex - 2 만큼 반복하며 s의 원소를 찾게 된다.
int i,u,w;
initarray(vertex);//배열을 초기화 found[i]는 false로, distance[i] = cost[vertex][i]로
for(i=0;imax_vertex-2;i++){
u = choose();//시작 정점 v로 부터 최소거리를 갖는 정점 u를 반환
found[u] = true;//true로 초기화
for(w=0;wmax_vertex;w++){
if(!found[w]){
if(distance[u] + cost[u][w] distance[w])
distance[w] = distance[u] + cost[u][w];
}
}
}
}
여기서 printpath 함수가 어떤 행동을 해야 할지 감이 안잡히네요 ㅠ
대략의 설명이라도 부탁드립니다....
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2676033 | 배열 기초연습중 발생하는 에러 ㅠㅜ... | Creative | 2024-11-23 |
2676005 | keybd_event 게임 제어 | 영글 | 2024-11-23 |
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |
2675356 | 2진수를 10진수로 바꾸려고 하는데 막히네요.. | 풀잎 | 2024-11-17 |
2675297 | Prity 비트 발생기 | 한란 | 2024-11-16 |
2675249 | C책 좀 추천해 주세요 (2) | 딸기우유 | 2024-11-16 |
2675193 | 연습문제 17-1 질문입니다. | 한별나라 | 2024-11-15 |
2675172 | 소스점 | 아이뻐 | 2024-11-15 |