오늘의 알고리즘
[C++] 백준 11403 경로 찾기
하늘하늘 .
2022. 9. 21. 22:34
#include <iostream>
#include <vector>
#include <queue>
int N = 0;
int vec[101][101] = {};
void floyd()
{
for (int k = 0; k < N; ++k)
{
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < N; ++j)
{
if (vec[i][k] && vec[k][j])
vec[i][j] = 1;
}
}
}
}
int main()
{
std::cin >> N;
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < N; ++j)
{
std::cin >> vec[i][j];
}
}
floyd();
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < N; ++j)
{
std::cout << vec[i][j] << " ";
}
std::cout << "\n";
}
return 0;
}
플로이드와샬 알고리즘을 이용했습니다.
i -> k -> j를 이용해서 도달할 수 있다라는 걸 이용했습니다.
여기서 k는 임의의 새로운 위치입니다.
그렇기 때문에 k, i, j 순서로 만들어야 i -> k -> j는 i -> j를 할 수 있습니다.