-
백준 10159 저울 | 플로이드-워셜 | C++[백준 알고리즘]/[C++] 2021. 4. 8. 09:20728x90반응형
이번 포스팅은 백준 10159번 저울입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
기본 알고리즘
플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm)
풀이
line 40-48
int cnt //정점i와 연결되어 있는 정점의 개수
if (map[i][j] != INF || map[j][i] != INF) //i보다 무거운 물건 존재 또는 i보다 가벼운 물건 존재하면
cnt++; //연결정점 개수+1
ans[i] = (N - 1) - cnt; //비교 결과를 모르는 정점의 수 = 전체 정점 개수 - 자신 - 연결된 정점 개수
전체 코드
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455//백준10159 저울#include <iostream>using namespace std;const int INF = 9999999;const int MAX = 102;int N, M;int map[MAX][MAX];int ans[MAX];void floyd() {for (int k = 1; k <= N; k++) {for (int i = 1; i <= N; i++) {for (int j = 1; j <= N; j++) {if (map[i][j] > map[i][k] + map[k][j]) {map[i][j] = map[i][k] + map[k][j];}}}}}int main() {cin >> N >> M;for (int i = 1; i <= N; i++) {for (int j = 1; j <= N; j++) {map[i][j] = INF;}}for (int i = 0; i < M; i++) {int a, b;cin >> a >> b;map[a][b] = 1;}floyd();for (int i = 1; i <= N; i++) {int cnt = 0;for (int j = 1; j <= N; j++) {if (map[i][j] != INF || map[j][i] != INF) {cnt++;}}ans[i] = (N - 1) - cnt;}for (int i = 1; i <= N; i++) {cout << ans[i] << "\n";}return 0;}cs 728x90반응형'[백준 알고리즘] > [C++]' 카테고리의 다른 글
백준 2252 줄 세우기 | 위상정렬 | C++ (0) 2021.04.12 백준 1613 역사 | 플로이드-워셜 | C++ (0) 2021.04.09 백준 2458 키 순서 | 플로이드-워셜 | C++ (0) 2021.04.08 백준 15654 N과 M (5) | 조합 | C++ (0) 2021.04.06 백준 11404 플로이드 | C++ (0) 2021.04.06