-
1325번 효율적인 해킹 | BFS, DFS | Baekjoon BOJ 백준 1325 C++ 코드[백준 알고리즘]/[C++] 2021. 2. 19. 19:21728x90반응형
이번 포스팅은 백준 1325번 효율적인 해킹입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
기본 알고리즘
BFS 너비 우선 탐색
DFS 깊이 우선 탐색
참고
DFS, BFS의 정석 코드처럼 이차원 배열 사용 시 메모리 초과가 발생한다.
12int map[MAX][MAX];map[b][a] = 1;cs 벡터를 사용하면 해결된다.
12vector<int> map[MAX];map[b].push_back(a);cs 전체 코드
BFS 너비 우선 탐색
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273//백준1325 효율적인 해킹#include <iostream>#include <queue>#include <vector>#include <algorithm>using namespace std;int N, M;const int MAX = 10001;vector<int> map[MAX];bool visited[MAX];queue<int> q;vector<pair<int, int>> v; //<컴퓨터 번호, 해킹 가능한 컴퓨터 수> 벡터int hacked = 1; //해킹 가능한 컴퓨터 수void BFS(int v) {visited[v] = true;q.push(v);while (!q.empty()) {v = q.front();q.pop();for (int w = 0; w < map[v].size(); w++) {int nv = map[v][w];if (visited[nv] == 0) {visited[nv] = true;q.push(nv);hacked++;}}}}void resetVisit() {for (int i = 0; i <= N; i++) {visited[i] = 0;}}int main() {cin >> N >> M;for(int i=0;i<M;i++) {int a, b;cin >> a >> b;map[b].push_back(a);}for (int i = 1; i <= N; i++) {BFS(i);resetVisit();v.push_back(make_pair(i,hacked));hacked = 1;}//해킹 가능한 최대 컴퓨터 수 구하기int maxHack = -1;for (int i = 0; i < v.size(); i++) {if (v[i].second > maxHack) {maxHack = v[i].second;}}//maxHack에 해당하는 컴퓨터 번호 모두 출력for (int i = 0; i < v.size(); i++) {if (v[i].second == maxHack) {cout << v[i].first << " ";}}}cs DFS 깊이 우선 탐색
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465//백준1325 효율적인 해킹#include <iostream>#include <vector>#include <algorithm>using namespace std;int N, M;const int MAX = 10001;vector<int> map[MAX];bool visited[MAX];vector<pair<int, int>> v; //<컴퓨터 번호, 해킹 가능한 컴퓨터 수> 벡터int hacked = 1; //해킹 가능한 컴퓨터 수void DFS(int v) {visited[v] = true;for (int w = 0; w < map[v].size(); w++) {int nv = map[v][w];if (visited[nv] == 0) {visited[nv] = true;DFS(nv);hacked++;}}}void resetVisit() {for (int i = 0; i <= N; i++) {visited[i] = 0;}}int main() {cin >> N >> M;for (int i = 0; i < M; i++) {int a, b;cin >> a >> b;map[b].push_back(a);}for (int i = 1; i <= N; i++) {DFS(i);resetVisit();v.push_back(make_pair(i, hacked));hacked = 1;}//해킹 가능한 최대 컴퓨터 수 구하기int maxHack = -1;for (int i = 0; i < v.size(); i++) {if (v[i].second > maxHack) {maxHack = v[i].second;}}//maxHack에 해당하는 컴퓨터 번호 모두 출력for (int i = 0; i < v.size(); i++) {if (v[i].second == maxHack) {cout << v[i].first << " ";}}}cs 728x90반응형'[백준 알고리즘] > [C++]' 카테고리의 다른 글
1743번 음식물 피하기 | BFS, DFS | Baekjoon BOJ 백준 1743 C++ 코드 (1) 2021.02.24 5567번 결혼식 | BFS | 백준 5567 C++ 코드 (0) 2021.02.19 10026번 적록색약 | DFS | 백준 10026 C++ 코드 (0) 2021.02.11 1303번 전쟁-전투 | BFS, DFS | Baekjoon BOJ 백준 1303 C++ 코드 (0) 2021.02.11 1926번 그림 | BFS, DFS | Baekjoon BOJ 백준 1926 C++ 코드 (0) 2021.02.11