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 |
Tags
- 프로그래머스
- 알고리즘
- lower_bound
- DFS
- c#
- 유한상태기계
- upper_bound
- 이득우
- 이분탐색
- 유니티
- unity
- 게임개발공모전
- c++
- 언리얼
- 웅진씽크빅
- binary_search
- 개발일지
- 시리얼라이제이션
- BFS
- 구현
- 너비우선탐색
- 안드로이드
- unreal
- 백준
- UI 자동화
- 게임개발
- fsm
- 재귀
- 운영체제
- 인프런
Archives
- Today
- Total
초고교급 희망
[백준][C++]11404번 플로이드 본문
728x90
#include <iostream>
#define INF 987654321
using namespace std;
int n; //도시
int m; //버스
int arr[101][101] = { 0 };
int x, y, z;
int main() {
cin >> n;
cin >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
arr[i][j] = INF;
for (int i = 1; i <= n; i++)
arr[i][i] = 0;
for (int i = 0; i < m; i++) {
cin >> x >> y >> z;
if (arr[x][y] > z)
arr[x][y] = z;
}
//중간 노드
for (int k = 1; k <= n; k++) {
//시작 노드
for (int i = 1; i <= n; i++) {
//도착 노드
for (int j = 1; j <= n; j++) {
if (arr[i][k] + arr[k][j] < arr[i][j]) {
arr[i][j] = arr[i][k] + arr[k][j];
}
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (arr[i][j] == INF) {
cout << "0 ";
}
else {
cout << arr[i][j] << " ";
}
}
cout << "\n";
}
return 0;
}
가능성이 여러 가지가 있다면 무한이며
어떤 것이 더 최단거리인지 따져서 값을 채워줘야한다.
일단 모두 무한으로 해두고, 같은 곳에서 같은 곳으로 가는 값은 0으로 채워준다.
무한인 곳에는 입력 받은 비용을 채워주고, 이미 비용이 있다면 더 작은 비용으로 바꾼다.
i에서 j로 바로 가는 것이 최단 비용인지, k를 거쳐서 i-k, k-j로 가는 것이 최단 비용인지 계산한다.
그 중 작은 값으로 저장한다.
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준][C++]14503번 로봇 청소기 (0) | 2023.05.24 |
---|---|
[백준][C++]2563번 색종이 (1) | 2023.04.18 |
[백준][C++]2805번 나무 자르기 (0) | 2022.05.16 |
[백준][C++]1072번 게임 (0) | 2022.05.16 |
[백준][Python]10866 0 = not cute / 1 = cute (0) | 2021.08.07 |