플로이드 알고리즘 구현 방법 알려주시면 감사하겠습니다

플로이드 알고리즘 구현 방법 알려주시면 감사하겠습니다

작성일 2024.05.21댓글 1건
    게시물 수정 , 삭제는 로그인 필요

아래 첨부한 사진에 설명되어 있는 것처럼 구현을
해야하는데 어떻게 해야하는지 모르겠어서요…
이 코드를 이용해서 해야하는데 알려주시면 감사하겠습니다…!
int main ()
{
int i, j, k, tmp;
for (i = 0; i < N; i++)
for (j= 0;j< N;j++)
Path[i][j] = (D[i][j] != INF) ? j: -1;
for (k = 0; k < N; K++) {
for (i = 0; i < N; i++) {
if (i = k) continue;
for (j= 0;j<N; j++){
if (j == K || j == i) continue;
if(D[i][k]==INF || D[k][j]==INF) continue;
if ((tmp = D[i][k] + D[K][j]) < D[i][j]) {
D[i][j] = tmp;
Path[i][j] = k;
}


printf("=======%d=======\n", k + 1);
for (i = 0; i < N; i++) {
For (= 0; j< N; j++)
printf((D[i][j] >= INF ? "INF ":"%3d "), D[i][j]);
printf("\n");
}
}

printf ("================\n");
for (i = 0; i < N; i++)
for (j= 0; j< N; j++)
if (i != j) print_path(i, j);

void print_ path(int i, int j )
{
if (Path[i][j] == -1 || i == j)
return;
printf("%3d :", D[i][j]);
printf("%d", i) ;

while (i != j) {
i = Path[i][j];
printf("->%d", i);
}
printf("\n");
}



#플로이드 알고리즘 #플로이드 알고리즘 c++ #플로이드 알고리즘 최단경로 출력 #플로이드 알고리즘 파이썬 #플로이드 알고리즘 시간복잡도 #플로이드 알고리즘 자바 #플로이드 알고리즘 최단경로 #플로이드 알고리즘 2 #플로이드 알고리즘 c언어 #플로이드 알고리즘 설명

profile_image 익명 작성일 -

안녕하세요..

흥미로운 주제의 문의가 있었군요.

늦은 답변이라 이미 해답을 찾았을 지 모르겠으나..

아래와 같이 소스코드와 출력 캡쳐와 함께 답변을 드려 봅니다.

도움이 되시길 바랍니다.

추가) macos clang 기준으로 작성된 것이므로 만일 윈도우 버전이면, ansi 관련 코드 등은 호환 되지 않을 수 있습니다.

해당 부분만 제거 하시면되겠습니다.

## 소스 코드 파트 ##

void Floyd_City() { const int INF = 1000000000; // 비교를 위한 비교적 큰값설정, 교체값 const int size = 11; // 열이름 표시를 위해 1을 더함 char City[][8] = {"서울", "원주", "강릉", "포항", "천안", "논산", "대전", "광주", "대구", "부산"}; // 거리표 int dist[size][size]; // 인접행렬 int adj[size][size]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { adj[i][j] = 0; } } adj[1][2] = 15; adj[1][5] = 12; adj[2][1] = 15; adj[2][3] = 21; adj[2][9] = 7; adj[3][2] = 21; adj[3][4] = 25; adj[4][3] = 25; adj[4][9] = 19; adj[4][10] = 5; adj[5][1] = 12; adj[5][6] = 4; adj[5][7] = 10; adj[6][5] = 4; adj[6][7] = 3; adj[6][8] = 13; adj[7][5] = 10; adj[7][6] = 3; adj[7][9] = 10; adj[8][6] = 13; adj[8][10] = 15; adj[9][2] = 7; adj[9][4] = 19; adj[9][7] = 10; adj[9][10] = 9; adj[10][4] = 5; adj[10][8] = 15; adj[10][9] = 9; // 초기화 (같은도시 : 0, 연결되지 않은 도시 : 무한대, 나머지 : 거리(adj)) for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (i == j) { dist[i][j] = 0; } else if (adj[i][j] != 0) { dist[i][j] = adj[i][j]; } else { dist[i][j] = INF; } } } printf("\n"); // 초기 거리 출력 printf("\u2728 \033[33m 도시별 거리 출력 표 \033[0m \u2728\n"); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (dist[i][j] == INF) { printf(" %s ", "\u221E"); continue; } printf("%2d ", dist[i][j]); } printf("\n"); } printf("\n"); // 최단거리 계산 (플로이드 워셜 알고리즘) for (int k = 0; k < size; k++) { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { int temp = dist[i][k] + dist[k][j]; if (dist[i][j] > temp) { dist[i][j] = temp; } } } } printf("\n"); // 최단거리 출력 표 (도시이름과 함께 출력) printf("\u2728 \033[33m 최단거리 출력 표 (도시이름과 함께 출력) \033[0m \u2728\n"); for (int i = 0; i < size; i++) { if (i == 0) { printf("\t"); for (int j = 0; j < size - 1; j++) { printf("\033[32;42m %s \033[0m\t", City[j]); } printf("\n"); continue; } for (int j = 0; j < size; j++) { if (j == 0) { printf("\033[32;42m %s \033[0m\t", City[i - 1]); continue; } printf("%4d\t", dist[i][j]); } printf("\n"); } printf("\n"); // From ~ To : 최단거리 출력 (도시이름과 함께 출력) printf("\u2728 \033[33m From ~ To : 최단거리 출력 (도시이름과 함께 출력) \033[0m \u2728\n"); for (int i = 0; i < size; i++) { if (i != 0) { printf("\u26DF "); } for (int j = 0; j < size; j++) { if (dist[i][j] == INF) { continue; } if (i == j) continue; printf("\033[31m %s\u27A0%s \u276A%2dkm\u276B,\033[0m ", City[i - 1], City[j - 1], dist[i][j]); } printf("\n"); } } int main() { Floyd_City(); }

## 출력 테스트 ##

## 참조 데이터 ##

## 제공된 이미지 데이터 ##

알고리즘 공부법 좀 알려 주세요

... 좀 알려 주시면 감사하겠습니다 좋은 하루 되세요 알고리즘. ㅠ_ㅜ 줄줄.. 대학때 시험이 너무 어려워서 3문제... 다음이 그 방식을 소스코드로 어떻게 구현했는가를 봅니다....

알고리즘에 관한 논문 작성 도와주세요...

... 학교 숙제로 "알고리즘으로 인해 발생하는 문제" 라는... 방법알려주세요 ㅠㅠㅠㅠㅠ 이론적 배경도 어떻게 구성해야할지 모르겠습니다! 구체적으로 도와주시면 좋을...

c 알고리즘 문제..

... 알고리즘 구현해야 되는데... 방법알려주세요 ㅠㅠㅠ 너무 머리아파요.. 혹시 아는 api함수라던지 관련 소스가 있으면 같이 첨부해주시면감사하겠습니...

DBV C++ 수행평가좀 도와주세요ㅠㅠ

... 직접 프로그래밍을 평가요소에 맞게 짜주시면 감사하겠지만 안되시다면 알고리즘 정도만 알려주세요 ㅠㅠ 밑에... 대한 추가 정보나 구체적인 구현 방법에 대해 알려주세요.

전자신호의 역사 알려주세요ㅠㅠ

... 알려주세요ㅠㅠ 곧있으면 발표인데 검색을해도 잘 안나와서… 중학생이 알아듣기 쉽게 성명해주시면 감사하겠... 1965년 쿨리-터키가 고속퓨리어변환(FFT) 알고리즘을...