Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- c++ 조합
- C++ 9996
- C# 병합정렬
- 월곡동 학원추천
- C++ 문자열
- 백준 1049번 기타줄
- 백준 한국이 그리울 땐 서버에 접속하지
- 관리형 학원
- 백준 K보다 큰 구간
- 백준 토마토
- 월곡역 학원
- 백준 dfs
- 고정 소수점
- 백준 패션왕 신해빈
- DFS
- 상월곡역 학원
- 백준 10709
- OS
- 서울사대부고 학원
- 백준 14246번 K보다 큰 구간
- 상월곡동 학원
- 운영체제
- c++ split
- 월곡중 학원
- 백준 14246번
- 백준 9375번 패션왕 신해빈
- 월곡중학교 학원추천
- 백준 1049번
- 백준 2309번 일곱 난쟁이
- 성북구 학원
Archives
- Today
- Total
키베이루's diary
[C++] 백준 13023번 ABCDE 본문
1) 문제설명
https://www.acmicpc.net/problem/13023
13023번: ABCDE
문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다.
www.acmicpc.net
2) 아이디어
정점들을 입력하고 모든 정점에서 DFS를 따로따로 돌려주어서 DFS를 실행한 횟수가 4번 이상이면 친구의 친구가 4번있다는 뜻이다.
3) 코드
#include<iostream>
#include<queue>
#include<deque>
#include<string.h>
#include<math.h>
#include<cmath>
#include<stack>
#include<algorithm>
using namespace std;
int visited[2001]={0,};
vector <int> v[2001];
int flag = 0;
int maxt = 0;
void dfs(int x, int cnt) {
if (visited[x] == 1) { // 방문했다면 리턴
return ;
}
visited[x] = 1; //방문 표시
if (cnt >= 4) { // dfs를 4번이상 실행했다면 = 친구의 친구가 4번있다면
flag = 1; // 표시해주고
return; // 리턴(안하면 시간초과)
}
for (int i = 0; i < v[x].size(); i++) {// v[0] = 1, 0
dfs(v[x][i], cnt + 1);
}
visited[x] = 0;
}
int main() {
int n, m;
int arr[2001], brr[2001];
cin >> n >> m;
for (int i = 0; i < m; i++) {
cin >> arr[i] >> brr[i];
v[arr[i]].push_back(brr[i]);
v[brr[i]].push_back(arr[i]);
}
for (int i = 0; i < n; i++) {
dfs(i, 0); // 정점을 처음 시작만 하는게 아니라 모든 정점에서 dfs를 한번씩 해봐야함
memset(visited, 0, sizeof(visited)); // dfs한번 돌리고 방문기록 초기화
}
cout << flag << endl;
}
'알고리즘 > BFS, DFS' 카테고리의 다른 글
[C++] 백준 2468번 안전 영역 (0) | 2022.06.17 |
---|---|
[C++] 백준 11724번 연결 요소의 개수 (0) | 2022.06.16 |
[C++] 백준 2206번 벽 부수고 이동하기 (0) | 2022.06.13 |
[C++] 백준 16928번 뱀과 사다리 게임 (0) | 2022.06.11 |
[C++] 백준 7579번 토마토 (0) | 2022.06.11 |
Comments