2023. 3. 31. 23:42ㆍ자료구조 및 알고리즘/백준
나의 구린 구현력
https://armembedded.tistory.com/91
[백준 24479] 알고리즘 수업 - 깊이 우선 탐색 1
백준 문제 참고 링크 공유 소스 보기 (acmicpc.net) 공유 소스 보기 www.acmicpc.net 수도 코드(pseudo-code) : 의사 코드 dfs(V, E, R) { # V : 정점 집합, E : 간선 집합, R : 시작 정점 visited[R]
armembedded.tistory.com
이거보고 E는 adj라고 눈치채고 풀었지만 -- 그러니까 인접리스트 adj는 E
구현은 요것밖에 안 했다.
수도 코드가 다음과 같은데
한 구현은
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#define fio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
using namespace std;
int n,m,s,a,b,idx=1;
vector<int> adj[100005]; //인접리스트 E
// 인접리스트를 큐 형식으로?? - 아니
int answer[100005];
bool visited[100005];
void bfs(int cur){ // 바킹독님 코드랑 원리는 비슷
for (int x: ){ // 여기
visited[x]=false; // 각 코드에서 왜 false하고 true하는지 알아봐요
}
visited[cur]=true;
queue<int> Q;// bfs 한 번 할 때 큐 하나 생성하고...
Q.push(cur); // # 큐 맨 뒤에 시작 정점
while(!Q.empty()){
Q.pop();
for(int x: ){ // 대문자 E는 adj
visited[x]=true;
Q.push(x);
}
}
}
int main(){
fio;
cin >> n >> m >> s;
for (int i = 0; i < m; i++){
cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
for (int i = 1; i <= n; i++){
sort(adj[i].begin(), adj[i].end());
}
bfs(s);
for (int i = 1; i <= n; ++i) {
cout << answer[i] << '\n';
}
return 0;
}
다른 사람 풀이를 참고하자... 구현력을 늘리자 임마;;
https://kiveiru.tistory.com/m/24
[C++] 백준 24444번 알고리즘 수업 - 너비 우선 탐색 1
1) 문제설명 https://www.acmicpc.net/problem/24444 24444번: 알고리즘 수업 - 너비 우선 탐색 1 첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다. 다음
kiveiru.tistory.com
https://junseok.tistory.com/268?category=955870
백준 24444 - 알고리즘 수업 - 너비 우선 탐색 1 (C++)
문제 링크입니다. https://www.acmicpc.net/problem/24444 24444번: 알고리즘 수업 - 너비 우선 탐색 1 첫째 줄에 정점의 수 N (5 ≤ N ≤ 100,000), 간선의 수 M (1 ≤ M ≤ 200,000), 시작 정점 R (1 ≤ R ≤ N)이 주어진다
junseok.tistory.com
위에 두 사람 풀이 참조했다
근데 그래프 입력 받는 거 공통 패턴 있지 않나? 그거 파악해라... 오늘 adj가 뭐하는 친구인지 까먹고 있었다.
참고로 큐는 선입선출) 뒤에서 넣고 앞에서 빼는 자료구조다
https://github.com/encrypted-def/basic-algo-lecture/blob/master/0x06/queue_test.cpp
GitHub - encrypted-def/basic-algo-lecture: 바킹독의 실전 알고리즘 강의 자료
바킹독의 실전 알고리즘 강의 자료. Contribute to encrypted-def/basic-algo-lecture development by creating an account on GitHub.
github.com
이거 구현해보면 안다. head에서 tail에서 각각 어떤 일을 하는지!
오늘 할 일) vector로 그래프 입력 받는 거 해보기. graph로 입력 받을 때 변수명을 adj로 하는 것보다는 graph하는게 더 직관적이다.
그리고 코드 이해하기
'자료구조 및 알고리즘 > 백준' 카테고리의 다른 글
[백준 11050]이항 계수 1 (0) | 2023.04.01 |
---|---|
[백준 1085] 직사각형 탈출 (0) | 2023.04.01 |
[백준 1926] 그림 문제 복습 (실수 최종 수정) (0) | 2023.03.31 |
[백준 24480] 알고리즘 수업 - 깊이 우선 탐색 2 (0) | 2023.03.28 |
[백준 24479] 알고리즘 수업 - 깊이 우선 탐색 1 (0) | 2023.03.28 |