Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- build:15
- ar과 make 사용법
- ros
- LIDAR
- ouster
- OS1
- gcc를 사용한 컴파일 예제
- c
- catkin_make
- geth 설치 안됨
- build:12
- ethereum
- 시스템프로그래밍
- gcc
- aes-128-ctr
- aes-ctr
- c언어로 쉽게 풀어쓴 자료구조
- error
- studio
- aes decrypt
- build 에러
- geth 설치 에러
- Linux
- aes ctr decrypt
- ousterstudio
- floyld
- aes ctr
- gcc 실행
- geth 설치
- aes_ctr
Archives
- Today
- Total
CODERJH
Floyd의 최단 경로 알고리즘 본문
Floyd의 최단 경로 알고리즘은 그래프에 존재하는 모든 정점 사이의 최단 경로를 한번에 모두 찾아주는 알고리즘이다.
#include <stdio.h> #include <stdlib.h> #define INF typedef struct FloydGraph { int n; int weight[100][100]; } FloydGraph; int cnt; int distance[100][100]; void GraphPrint(FloydGraph* f) { int i, j; printf("--> %d 번째\n\n",++cnt); for (i = 0; i < f->n; i++) { for (j = 0; j < f->n; j++) { if (distance[i][j] == INF) printf(" * "); else printf("%3d ", distance[i][j]); } printf("\n"); } printf("\n"); } void floyd(FloydGraph* f) { int i, j, k; for (i = 0; i < f->n; i++) for (j = 0; j < f->n; j++) distance[i][j] = f->weight[i][j]; GraphPrint(f); for (k = 0; k < f->n; k++) { for (i = 0; i < f->n; i++) for (j = 0; j < f->n; j++) if (distance[i][k] + distance[k][j] < distance[i][j]) distance[i][j] = distance[i][k] + distance[k][j]; GraphPrint(f); } } int main()
{ int n; FloydGraph city = { 10, {{ 0,15,INF,12,INF,INF,INF,INF,INF,INF}, {15,0,21,INF,INF,INF,7,INF,INF,INF}, {INF,21,0,INF,INF,INF,INF,25,INF,INF}, {12,INF,INF,0,4,10,INF,INF,INF,INF}, {INF,INF,INF,4,0,3,INF,INF,13,INF}, {INF,INF,INF,10,3,0,10,INF,INF,INF}, {INF,7,INF,INF,INF,10,0,19,INF,9}, {INF,INF,25,INF,INF,INF,19,0,INF,5}, {INF,INF,INF,INF,13,INF,INF,INF,0,15}, {INF,INF,INF,INF,INF,INF,9,5,15,0}} }; printf(" 0=서울, 1=원주, 2=강릉, 3=천안, 4=논산, 5=대전, 6=대구, 7=포항, 8=광주, 9=부산\n\n"); floyd(&city); return 0; } |
참고문헌