250x250
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
- union_find
- BFS
- javascript
- JPA
- CSS
- 힙덤프
- Union-find
- Calendar
- spring boot
- Java
- string
- priority_queue
- deque
- List
- 큐
- map
- set
- date
- 스프링부트
- math
- sql
- Properties
- html
- GC로그수집
- scanner
- dfs
- alter
- 스택
- NIO
- 리소스모니터링
Archives
- Today
- Total
매일 조금씩
백준 11403번 : 경로 찾기 [C++] 본문
728x90
반응형
Floyd Warshall 알고리즘으로 푸는 문제였다.
Floyd Warshall 알고리즘은 두 정점간의 거리의 최단거리를 구하는 알고리즘이다.
거쳐가는 정점을 기준으로 두 정점이 각각 연결되어있다면 두정점은 연결된 상태라고 보는 것이 바탕이다.
i - k - j 일때,
k를 기준으로 for문을 돌리면서 i - k - j 거리를 i - j 거리로 정의하는데
"min( i - j 거리 , i - k - j 거리 )" 를 반복한다.
#include <iostream>
#include <queue>
//#include <cstring> //memset
#include <algorithm>
using namespace std;
const int MAX = 100;
typedef struct {
int y, x;
}dir;
int N;
int graph[MAX][MAX];
void floyd(void) {
// i -> j 로 가는 길이 없어도
// k를 거쳐서 갈 수 있으면 갈 수 있다고 여긴다.
for (int k = 0; k < N; k++) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (graph[i][k] && graph[k][j]) // k : 거쳐가는 점
graph[i][j] = 1;
}
}
}
}
int main(void) {
cin >> N;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> graph[i][j];
}
}
floyd();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << graph[i][j] << " ";
}
cout << endl;
}
return 0;
}
728x90
반응형
'알고리즘 > 최단 경로' 카테고리의 다른 글
이코테 최단경로 : 전보 [C++] - 다익스트라 (0) | 2021.05.31 |
---|