250x250
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 |
29 | 30 | 31 |
Tags
- BFS
- dynamic programming
- canny edge detection
- MinHeap
- 딥러닝
- opencv
- MySQL
- 자료구조
- Mask Processing
- sklearn
- IN
- dfs
- 강화학습
- 인공지능
- 백준
- exists
- classification
- Reinforcement Learning
- AlexNet
- edge detection
- SIFT
- Python
- machine learning
- DP
- 머신러닝
- image processing
- C++
- TD
- 그래프 이론
- clustering
Archives
- Today
- Total
JINWOOJUNG
[ 그래프 이론 - 9372번 ] 상근이의 여행(C++) 본문
728x90
반응형
Intro
앞으로 모든 백준 문제는 C++로 해결하고자 한다. 코테를 위해서는 Python이 더 편하지만, 실제 실력을 더 향상시킬 수 있는 것은 C++이기 때문에 코테 준비는 나중에 하기로 했다. 또한, 이번에 자율주행 경진대회를 준비하면서 코드 통합을 진행 하였는데 변수명을 선언하는 것이 전부 다 달라서 애먹었다. 앞으로는 박사님이 정해주신 틀 안에서 타인이 봐도 알아볼 수 있도록 변수명을 통합할 것이다.
접근법
비행기 종류는 vector로 저장하면 된다. a,b쌍은 a,b를 왕복하는 비행기가 있음을 의미하기에 vector 배열의 a와 b index에 모두 저장해야 한다.
모든 국가를 여행하기 위해서 각 국가를 방문했음을 확인하기 위한 bool 형 array가 요구된다.
또한 저장한 비행기 종류를 기반으로 각 국가를 방문하는 과정을 queue 자료형을 통해 구현 가능하다. vector에는 각 index에 해당하는 국가에서 갈 수 있는 국가들에 대한 정보가 저장되어 있다. 따라서 갈 수 있는 국가에 대해서 만약 방문하지 않았더라면 queue에 집어넣고, while문을 queue가 empty일 때 까지 반복하여 모든 국가를 탐색하면 된다.
정답
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
vector<int32_t> ars32_Graph[1001];
bool arb_Check[1001];
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int32_t s32_Cnt,s32_I;
cin >> s32_Cnt;
for (s32_I = 0; s32_I < s32_Cnt; s32_I++)
{
int32_t s32_Node, s32_Edge, s32_A, s32_B, s32_J;
cin >> s32_Node >> s32_Edge;
// Graph, Check 초기화
for (s32_J = 1; s32_J <= s32_Node; s32_J++)
{
ars32_Graph[s32_J].clear();
arb_Check[s32_J] = false;
}
// Graph 생성
for (s32_J = 0; s32_J < s32_Edge; s32_J++)
{
cin >> s32_A >> s32_B;
ars32_Graph[s32_A].push_back(s32_B);
ars32_Graph[s32_B].push_back(s32_A);
}
// 탐색을 위한 queue 생성
int32_t s32_Result = 0;
queue<int32_t> qs32_Q;
qs32_Q.push(1);
arb_Check[1] = true;
// 탐색
while (!qs32_Q.empty())
{
int32_t s32_Idx = qs32_Q.front();
qs32_Q.pop();
for (s32_J = 0; s32_J < ars32_Graph[s32_Idx].size(); s32_J++)
{
int32_t s32_NextIdx = ars32_Graph[s32_Idx][s32_J];
if (!arb_Check[s32_NextIdx])
{
arb_Check[s32_NextIdx] = true;
s32_Result++;
qs32_Q.push(s32_NextIdx);
}
}
}
printf("%d\n", s32_Result);
}
return 0;
}
728x90
반응형
'백준' 카테고리의 다른 글
[ 그래프 이론 - 24444 ] 알고리즘 수업 - 너비 우선 탐색 1 (0) | 2024.03.19 |
---|---|
[ 정렬 - 11399 ] ATM (0) | 2024.03.17 |
[ 그래프 이론-11403 ] 경로 찾기(Python) (1) | 2024.01.05 |
[ 그래프 이론-11725 ] 트리의 부모 찾기(Python) (1) | 2024.01.04 |
[ 그래프 이론 - 4963 ] 섬의 개수(Python) (0) | 2024.01.03 |