-
백준 1613번 : 역사 (C언어)c c++ 언어 공부 2023. 3. 23. 11:54
https://www.acmicpc.net/problem/1613
1613번: 역사
첫째 줄에 첫 줄에 사건의 개수 n(400 이하의 자연수)과 알고 있는 사건의 전후 관계의 개수 k(50,000 이하의 자연수)가 주어진다. 다음 k줄에는 전후 관계를 알고 있는 두 사건의 번호가 주어진다.
www.acmicpc.net
Code:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546#include <stdio.h>#define INF 987654321int main(){int n, k;int arr[401][401] = { 0, };int start, end;scanf("%d %d", &n, &k);while (k--){scanf("%d %d", &start, &end);arr[start][end] = -1;arr[end][start] = 1;}for (int a = 1; a <= n; a++){for (int b = 1; b <= n; b++){for (int c = 1; c <= n; c++){if (b != c){if (arr[b][a] == -1 && arr[a][c] == -1){arr[b][c] = -1;arr[c][b] = 1;}if (arr[b][a] == 1 && arr[a][c] == 1){arr[b][c] = 1;arr[c][b] = -1;}}}}}int s=0;scanf("%d", &s);while (s--){scanf("%d %d", &start, &end);printf("%d\n", arr[start][end]);}return 0;}cs 문제풀이 :
플로이드 워셜 알고리즘을 이용하였다. 첫 2배열에 입력시 앞이 빠르면 -1 뒤가 빠르면 1로 값을 넣어주고
3중 for문 안에서 노드의 연결을 파악하여 값을 채워주었다.
플로이드-워셜 알고리즘 - 나무위키
이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권
namu.wiki
알고리즘 참고 바랍니다.
'c c++ 언어 공부' 카테고리의 다른 글
백준 2217번 : 로프 (C언어) (0) 2023.03.24 백준 5585번 : 거스름돈 (C언어) (0) 2023.03.23 백준 1904번 : 01타일 (C언어) (0) 2023.03.22 백준 4779번 : 칸토어 집합 (C언어) (0) 2023.03.22 백준 4134번 : 다음 소수 (C언어) (0) 2023.03.21