Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 삼성SW테스트
- 코딩테스트
- swea
- KAKAO
- 이런게4문제
- priority_queue
- dfs
- 백준
- Set
- 모의SW역량테스트
- BFS
- 레벨2
- 완전탐색
- 삼성
- 코딩스킬
- 브루트포스
- Map
- 프로그래머스
- 2018
- 문자열
- C++
- find
- 시뮬레이션
- dp
- 삼성SW역량테스트
- Sort
- STL
- 레벨3
- 백트래킹
- substr
Archives
- Today
- Total
-
[DFS] 백준 11403번 - 경로 찾기 (정답률 51%) 본문
https://www.acmicpc.net/problem/11403
11403번: 경로 찾기
가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오.
www.acmicpc.net
백준 DFS 연습 문제이다.
최근 문제풀면서 DFS에 대한 응용력이 부족한것같아 풀어보았다.
원리와 성격을 알지만 응용을 잘 할 수 있게 지속적으로 연습하자.
이 문제는 각 정점에서 다른 정점으로 갈 수 있는 경로가 있다면 1, 아니면 0을 N x N 행렬에 저장해 출력하라는 문제다. 모든 정점 쌍에 대해 dfs 탐색을 하면 시간 초과가 뜨지만, 한 정점에서 갈 수 있는 모든 점들을 찾으면 그 점들에 갈 수 있는 경로가 있다는 뜻이므로 실제로 dfs 탐색을 N^2 할 필요가 없이 N 개의 정점을 시작점으로 하여 dfs 탐색을 하면 된다.
아래는 소스코드. (4ms)
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
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include <iostream>
#define maxlen 101
using namespace std;
int N;
int Dir_Graph[maxlen][maxlen];
bool check[maxlen];
int Answer[maxlen][maxlen];
int SV;
// 점은 1~100 인덱스 유효.
void falsing(){
for (int i = 1; i <= N; i++)
check[i] = false;
}
void toAnswer(){
for (int i = 1; i <= N; i++){
if (check[i])
Answer[SV][i] = 1;
else
Answer[SV][i] = 0;
check[i] = false;
}
}
void dfs(int curpos){
for (int i = 1; i <= N; i++){
if (!check[i] && Dir_Graph[curpos][i]){
check[i] = true;
dfs(i);
}
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N;
for (int i = 1; i <= N; i++){
for (int j = 1; j <= N; j++){
cin >> Dir_Graph[i][j];
}
}
falsing();
// 각 행별로 시작정점을 잡고, 그 정점에서 dfs탐색을 해서 갈 수 있었던 점들 모두 true.
for (int start_virtex = 1; start_virtex <= N; start_virtex++){
SV = start_virtex;
dfs(SV);
toAnswer();
for (int i = 1; i <= N; i++)
cout << Answer[start_virtex][i] << " ";
cout << '\n';
}
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
'3. DFS & 백트래킹' 카테고리의 다른 글
[DFS] 백준 2468번 - 안전영역 (정답률 33%) (0) | 2020.01.13 |
---|---|
[DFS] 백준 2583번 - 영역 구하기 (정답률 56%) (0) | 2020.01.13 |
[DFS] 백준 2667번 - 단지번호붙이기 (정답률 38%) (0) | 2020.01.07 |
[DFS] 백준 1012번 - 유기농 배추 (정답률 34%) (0) | 2020.01.07 |
[BOJ-1260] DFS와 BFS (0) | 2019.12.27 |
Comments