문제 링크입니다: https://www.acmicpc.net/problem/11403
플로이드-와샬 알고리즘을 적용하여 푸는 문제였습니다.
여태까지 풀었던 플로이드 알고리즘 문제와는 달리 자기 자신한테도 가는 경우도 고려하는 것이 핵심이였습니다!
#include <iostream>
using namespace std;
const int MAX = 100;
int N;
int graph[MAX][MAX];
void floyd(void)
{
//i->j로 가는 길이 없어도
//k를 거쳐갈 수 있으면 갈 수 있다고 여긴다
for (int k = 0; k < N; k++)
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
if (graph[i][k] && graph[k][j])
graph[i][j] = 1;
}
int main(void)
{
cin >> N;
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cin >> graph[i][j];
floyd();
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
cout << graph[i][j] << " ";
cout << endl;
}
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 10448번 유레카 이론 (0) | 2018.06.30 |
---|---|
백준 11585번 속타는 저녁 메뉴 (0) | 2018.06.30 |
백준 5585번 거스름돈 (0) | 2018.06.30 |
백준 4354번 문자열 제곱 (0) | 2018.06.30 |
백준 1701번 Cubeditor (0) | 2018.06.30 |