본문 바로가기

dfs

(4)
백준 9466 번 - 텀프로젝트(C++/DFS/Graph) 문제 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 수도 있다. 프로젝트 팀을 구성하기 위해, 모든 학생들은 프로젝트를 함께하고 싶은 학생을 선택해야 한다. (단, 단 한 명만 선택할 수 있다.) 혼자 하고 싶어하는 학생은 자기 자신을 선택하는 것도 가능하다. 학생들이(s1, s2, ..., sr)이라 할 때, r=1이고 s1이 s1을 선택하는 경우나, s1이 s2를 선택하고, s2가 s3를 선택하고,..., sr-1이 sr을 선택하고, sr이 s1을 선택하는 경우에만 한 팀이 될 수 있다. 예를 들어, 한 반에 7명의 학생이 있다고 하자. 학생들을 1번부터 7번으..
백준 10451 번 - 순열 사이클 (C++/BFS/DFS/그래프) 문제 접근법 문제만 이해하면 접근법은 쉽다. 처음에 3,2,7,8,1,4,5,6 만 입력을 받고 그래프로 어떻게 표현하지를 생각하는데 시간이 오래걸렸다. 예시를 잘 보면 위쪽은 배열의 Index, 아래쪽은 입력한 수 이므로, adjacants[from][to] 라고 가정했을때 (adjacants는 그래프간의 연결을 나타냄), from = 배열의 Index to = 입력받은 수 를 넣어주면 된다 그 이후는 BFS코드를 그대로 사용한다. visited를 만들어서 q에 시작위치 하나를 먼저 저장한후, q.front(),q.push()를 반복하며 순회해준다. 사이클 수는 간단하다. 밑에서 BFS를 호출할때 for문에 넣어줘서 if(visited[i]==false) 일 때 순회하는데 만약 visited[1]이 f..
백준 11724번 - 연결요소의개수 (C++/ DP - 그래프(DFS,BFS)) 문제 방향 없는 그래프가 주어졌을 때, 연결 요소 (Connected Component)의 개수를 구하는 프로그램을 작성하시오. 접근법 인접행렬의 개수를 구하라는 것은 서로 연결되어 있지않은 그래프의 개수를 구하라는 것이다. 간단한 BFS,DFS문제이다. 다만 끊겨있는 경우를 체크해야 하므로, BFS할때 visited를 사용해서 방문하지 않은 노드를 for문으로 지속적으로 방문해주면 된다. 다만 인접행렬(정적배열)을 사용하지 말고 인접 리스트(vector)를 사용하는 것을 추천한다. 경우의 수가 노드는 N > V >> A; vector adjList(V); vector visited(V, false); for (int i = 0; i > from >..
알고리즘 공부 (알고리즘 개인정리 링크 첨부) 선형자료~동적계획법까지! 오랜만의 포스팅이다 ㅎㅎ. 요즘 github에 README나 notion에서만 정리하고 있다가 블로그의 존재를 까먹었다. 하여튼! 요즘 많은 공부를 하고있지만 가장 많이하는 것은 아무래도 알고리즘 및 DirectX11 일 것이다. 여기부턴 알고리즘을 포스팅한다. 백준을 포함해 여러 기초들을. 아래 링크는 내가 알고리즘 강의를 들으며 정리한 것들을 모아둔 것이다. 최대한 보기 좋게 정리하려 했지만 필력이 모자라다 ;-;... 아래 링크를 들어가면 선형자료 (동적배열, 연결리스트, 스택, 큐 등) 그래프 (DFS, BFS, 다익스트라) 트리 (이진 탐색트리, 레드-블랙트리, 힙트리, 우선순위 큐, A*) 정렬 (버블정렬, 선택정렬, 삽입정렬, 힙정렬, 퀵정렬, 병합정렬) 해시테이블 최소신장트리 (크루스칼, ..

728x90
반응형