반응형
플로이드-와샬 문제이다.
플로이드 와샬 알고리즘을 모르시는 분은 위의 링크에 들어가서 개념을 숙지하고 오길 추천한다.
#접근 방법
노드 1에서 노드 3으로 연결된 길이 있는지 물어봤다면?
노드 1에서 노드 2를 거쳤다가 노드 3으로 가는 길이 있는지.
노드 1에서 노드 4를 거쳤다가 노드 3으로 가는 길이 있는지.
이러한 방식으로 확인해보면서 그래프 값을 갱신해주는 것이다.
#include <iostream>
using namespace std;
int g[101][101];
int main() {
int n; cin >> n;
for(int i=0; i<n; i++){
for (int j = 0; j < n; j++) {
cin >> g[i][j];
}
}
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (g[i][k] && g[k][j]) {
g[i][j] = 1;
}
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << g[i][j] << " ";
}cout << endl;
}
}
반응형
'백준 > 그래프' 카테고리의 다른 글
[백준 1991번 / C++] 트리 순회 (0) | 2022.03.24 |
---|---|
[백준 11404번 / C++ / 플로이드-와샬] 플로이드 (0) | 2022.03.16 |
[백준 1717번 / C++ / find-union] 집합의 표현 (1) | 2022.03.04 |
[백준 1197번 / C++ / 크루스칼] 최소 스패닝 트리 (0) | 2022.03.04 |
[백준 2252번 / C++] 줄 세우기 (위상 정렬) (0) | 2022.03.03 |
댓글