반응형
728x170
플로이드 알고리즘으로 해결했다.
플로이드를 조금 더 풀어봐야겠다.
https://www.acmicpc.net/problem/11403
#맞는 풀이
#include <iostream>
#define MAX 101
using namespace std;
int N;
int adj[MAX][MAX];
void floyd()
{
//i -> j는 바로 안가도 다른 노드를 거쳐서 가도 된다.
//i -> k -> j 가능
for (int k = 1; k <= N; k++)
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
if (adj[i][k] && adj[k][j])
adj[i][j] = 1; //인접행렬 자체를 바꿈 -> 해당 행렬은 i노드에서 j노드로 갈 수 있는지 여부를 저장하는 테이블이 됨
return;
}
int main() {
cin >> N;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
cin >> adj[i][j]; //방향 그래프임.
}
}
floyd();
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
cout << adj[i][j] << " ";
}
cout << '\n';
}
return 0;
}
사실 플로이드 알고리즘도 최단거리를 알려주는 알고리즘이다.
여기서는 경로가 존재하는지만 알아봤기 때문이고 다른 문제를 풀어보면서 알아보자
728x90
반응형
그리드형
'문제풀이(Problem Solving)' 카테고리의 다른 글
백준, BOJ, 1922번, 네트워크 연결 : C++ [CPP] ★★★★ (0) | 2021.12.23 |
---|---|
백준, BOJ, 11403번, 플로이드 : C++ [CPP] ★★★★ (0) | 2021.12.23 |
백준, BOJ, 1504번, 최소비용2 : C++ [CPP] ★ (0) | 2021.12.22 |
백준, BOJ, 11779번, 최소비용2 : C++ [CPP] ★ (0) | 2021.12.22 |
백준, BOJ, 1916번, 최소비용 : C++ [CPP] ★★★ (0) | 2021.12.22 |