https://www.acmicpc.net/problem/11403
목적
모든 두 정점간의 경로가 존재하는지 구하자.
접근법
1. 플로이드 와샬 알고리즘으로 접근하자.
2. 알고리즘에 의해 i에서 j로 k를 거쳐갈 때, i와 k간의 경로가 존재하고 k와 j간의 경로가 존재하면 i와 j간의 경로가 존재하는 것이므로 값을 갱신한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include<iostream>
#define f(i,l,r) for(int i=l;i<r;++i)
using namespace std;
int main(){
ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int n,a[101][101];
cin>>n;f(i,0,n)f(j,0,n)cin>>a[i][j];
f(k,0,n)f(i,0,n)f(j,0,n)if(a[i][k]&&a[k][j])a[i][j]=1;
f(i,0,n){
f(j,0,n)cout<<a[i][j]<<' ';
cout<<'\n';
}
}
|
문제 설명과 코드에 대한 피드백은 언제나 환영합니다.
다양한 의견 댓글로 남겨주세요.
'Problem Solving > BOJ 백준' 카테고리의 다른 글
[ BOJ 백준 1916번 - 최소비용 구하기 ] 해설 및 코드 (0) | 2019.12.28 |
---|---|
[ BOJ 백준 1753번 - 최단경로 ] 해설 및 코드 (0) | 2019.12.28 |
[ BOJ 백준 1719번 - 택배 ] 해설 및 코드 (0) | 2019.12.27 |
[ BOJ 백준 1261번 - 알고스팟 ] 해설 및 코드 (0) | 2019.12.26 |
[ BOJ 백준 6118번 - 숨바꼭질 ] 해설 및 코드 (0) | 2019.12.26 |