-
백준 2458 키 순서 | 플로이드-워셜 | C++[백준 알고리즘]/[C++] 2021. 4. 8. 00:54728x90반응형
이번 포스팅은 백준 2458번 키 순서입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
기본 알고리즘
플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm)
풀이
line 39-49
int ans //출력(정답)
int cnt //정점i와 연결되어 있는 정점의 개수
if (map[i][j] != INF || map[j][i] != INF) //i보다 큰 사람이 존재 또는 i보다 작은 사람이 존재하면
cnt++; //연결정점 개수+1
if (cnt == N - 1) ans++; //i가 자신을 제외한 모든 정점과 연결되어 있음(키 순서를 정확히 파악 가능), 답+1
전체 코드
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152//백준2458 키순서#include <iostream>using namespace std;const int INF = 9999999;const int MAX = 502;int N, M;int map[MAX][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();int ans = 0;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++;}}if (cnt == N - 1) ans++;}cout << ans << endl;return 0;}cs 728x90반응형'[백준 알고리즘] > [C++]' 카테고리의 다른 글
백준 1613 역사 | 플로이드-워셜 | C++ (0) 2021.04.09 백준 10159 저울 | 플로이드-워셜 | C++ (0) 2021.04.08 백준 15654 N과 M (5) | 조합 | C++ (0) 2021.04.06 백준 11404 플로이드 | C++ (0) 2021.04.06 백준 9663 N-Queen | 백트래킹, DFS | C++ (0) 2021.04.01