목록Coding/Algorithm (17)
이우의 개발일지
백준 1260번 BFS와 DFS BFS와 DFS 풀이이 문제는 생각보다 까다로울 수 있는데, 일반적인 BFS와 DFS 구현에서 추가로 조건이 다음과 같이 붙는다. 조건 1. 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문한다.조건 2. DFS와 BFS 동시에 구현하기 조건 3. 들어간 순서대로 출력하기 BFSvoid Bfs(int start) { Q.push(start); vis_b[start] = 1; cout 먼저, BFS를 보면 일반적인 구현방식과 동일한데 중간에 sort 함수가 보일 것이다. 간선의 개수가 최대 10,000개까지 가능해서 처음에 이중 for문을 시도했다가 시간초과가 뜨는 쓴 맛을 봤다... ㅋㅋ 이중 for문에 시간복잡도는 O(n^2) 이고 내가 현재..
백준 11725번 트리의 부모 찾기 11725번 풀이이 문제도 일반적인 BFS 형식의 확정 문제이다. 결국에는 '각 노드의 부모 노드가 무엇이냐' 를 찾는 문제인데, 트리 구조를 바탕으로 하지만 트리의 층 순서대로 주는 것이 아닌 뒤죽박죽 형식으로 주기 때문에 결국에는 한번에 다 받은 다음에 BFS 구조로 찾는 방법으로 다가갔다. for (int i = 0; i > a >> b; if (a == 1) { parent[b] = 1; Q.push(b); vist[b] = 1; } else if (b == 1) { parent[a] = 1; Q.push(a); vist[a] = 1; } vec[a].push_back(b); vec[b].push_back(a);}1층의 노드는 무조건 1이라는 조..
백준 11724번 BFS 11724번 BFS 풀이이 문제는 일반적인 BFS 형식과는 조금 달라서 헤맸다. 상하좌우 탐색이 아닌, 모든 정점을 탐색해야해서 DFS로의 풀이도 가능하다. 모든 탐색을 해야해서 vector 함수를 이용해서 들어오는 인자값들을 입력해줬다. 한방향이 아니라 양방향이라 두 개다 넣어준 것이다. for (int i = 0; i > u >> v; vec[u].push_back(v); vec[v].push_back(u); } BFS 함수안 형식도 비슷하지만, 역시나 vector의 사이즈와 들어있는 인자값을 통해 조절해주는 포인트가 중요하다. 탐색시 vis라는 방문 인자를 1로 바꿔주는 것도 중요하다. 11724 백준 전체코드 #include #include #include usi..