티스토리 뷰
문제 링크: https://www.acmicpc.net/problem/11403
문제
가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정점의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄부터 N개 줄에는 그래프의 인접 행렬이 주어진다. i번째 줄의 j번째 숫자가 1인 경우에는 i에서 j로 가는 간선이 존재한다는 뜻이고, 0인 경우는 없다는 뜻이다. i번째 줄의 i번째 숫자는 항상 0이다.
출력
총 N개의 줄에 걸쳐서 문제의 정답을 인접 행렬 형식으로 출력한다. 정점 i에서 j로 가는 경로가 있으면 i번째 줄의 j번째 숫자를 1로, 없으면 0으로 출력해야 한다.
풀이 >>
BFS ,DFS 로 도 풀 수 있지만 모든 정점에서 모든 정점까지 갈 수 있는 경로를 나타내야 하는 문제이므로 플로이드를 사용하였다. 정점이 최대 100 개여서 O(n3) 이어도 충분히 풀린다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#include<iostream>
#include<cstring>
using namespace std;
int N;
int map[101][101];
int main()
{
int i,j,k;
cin >> N;
for(i =1; i <= N ;i++)
for(j =1; j <= N ;j++)
{
cin >> map[i][j];
if(!map[i][j])
map[i][j] = 201;
}
int ans = 0 ;
for( k = 1 ; k<= N; k++)
for( i = 1 ; i<= N ; i++)
for( j = 1 ; j<=N ; j++)
if(map[i][j] > map[i][k] + map[k][j] )
map[i][j] = map[i][k] + map[k][j];
for( i = 1 ; i<= N ; i++) {
for( j = 1 ; j<=N ; j++)
if(map[i][j] !=201)
cout << 1 <<" ";
else
cout << 0 << " ";
cout << "\n";
}
return 0;
}
|
cs |
'백준 (BOJ) > 플로이드 와샬' 카테고리의 다른 글
백준)1389-케빈 베이컨의 6단계 법칙 (0) | 2019.05.12 |
---|---|
백준) 1613 : 역사 (0) | 2019.05.04 |
백준 ) 2458 : 키 순서 (0) | 2019.05.04 |
백준) 11404 - 플로이드 (0) | 2019.05.04 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- #스페인어 #스페인어인강 #스페인어공부 #시원스쿨스페인어
- 백트레킹
- 그래프
- 이분 매칭
- HTML
- 백트래킹
- BFS
- 다익스트라
- 라이즈오브킹덤즈
- dfs
- JavaSwing
- 이분매칭
- 사이클
- 플로이드
- 사이크
- 그리디
- php
- KVK4
- 그리디알고리즘
- stri
- A
- 라오킹전사
- CSS
- greedy
- 정렬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함