목록그래프 (5)
천천히 빛나는
1. 음료수 얼려 먹기 connected component를 찾는 문제이다. 얼음을 얼릴 수 있는 공감이 상, 하, 좌, 우로 연결되어 있다고 표현할 수 있으므로 그래프 형태로 모델링 할 수 있다. 다음과 같이 3 x 3 크기의 얼음틀이 있다고 가정하면 위 그림과 같이 그래프로 만들 수 있다. 상, 하, 좌, 우로 연결되어 있는 노드들은 인접한 형태가 된다. 특정 지점에서 BFS 또는 DFS를 수행해서 이동 가능한 모든 경로에 대해서 다 방문처리를 진행하도록 처리할 수 있다. 1) BFS를 이용해서 구현 #include #include using namespace std; bool notAllowed[1001][1001]; int n, m; void bfs(int row, int col) { queue ..
https://shine-slowly.tistory.com/48 알고리즘 : DFS와 BFS (1) - DFS (C++로 구현) 참고 영상 : https://youtu.be/7C9RgOcvkvo?si=PuM-7RIBWbVPtYTw bfs와 dfs는 탐색 알고리즘이다. 내가 헷갈렸던 부분이 있는데 그래프를 인접 행렬, 인접 리스트로 표현할 수 있다고 배웠는데 bfs, dfs는 각각 큐랑 shine-slowly.tistory.com DFS에 관한 내용은 위 포스트에 있습니다. 참고 영상 : https://youtu.be/7C9RgOcvkvo?si=PuM-7RIBWbVPtYTw BFS (Breath-First Search, 너비우선탐색) 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘이다. BFS는 큐..
참고 영상 : https://youtu.be/7C9RgOcvkvo?si=PuM-7RIBWbVPtYTw bfs와 dfs는 탐색 알고리즘이다. 내가 헷갈렸던 부분이 있는데 그래프를 인접 행렬, 인접 리스트로 표현할 수 있다고 배웠는데 bfs, dfs는 각각 큐랑 스택을 사용하여 구현한다는 점이었다. bfs와 dfs는 그래프를 탐색하는 알고리즘인 것이다. 그래프를 표현하는 방식이 아니다! https://shine-slowly.tistory.com/39 알고리즘 : 자료구조(1) 스택 (Stack) (C++로 구현) 스택 (Stack) 스택(stack)은 쌓아놓은 더미라는 의미 그대로, 책상에 쌓여있는 책을 생각하면 된다. 가장 큰 특징은 LIFO(Last In First Out-후입선출)이다. 제일 최근에 들..
그래프의 표현 그래프를 컴퓨터가 처리하게 만들기 위해서는 그래프를 적절한 자료구조로 변환해 주어야 한다. 표현 방식에는 인접행렬(adjaceny matrix)와 인접리스트(adjaceny list)가 있다. 인접 행렬 그래프 (adjaceny matrix) 모든 정보를 저장하는 방식이다. 직관적이며 쉽게 구현이 가능하지만 불필요한 정보 저장이 많다. 그래프의 크기가 커지면 메모리 초과가 발생할 수도 있다. 보통 2차원 배열을 사용하여 구현한다. 정점의 개수가 총 n개이면 인접행렬은 nxn의 크기를 갖는다. 무방향 그래픠 경우 대각선을 중심으로 대칭이며 가중치가 있을 경우 1이 아닌 가중치를 저장하게 된다. 인접 리스트 그래프 (adjaceny list) 갈 수 있는 곳만 저장하는 방식이다. 필요한 정보만..
본 포스팅에서는 그래프의 기본 용어만 다룹니다. 인접행렬 및 인접리스트 관련 내용을 원한다면 (2)를 읽어주세요. 그래프(Graph) 정점(Node/Vertex, 노드)과 간선(Edge, 엣지)으로 이루어진 자료구조이다. 정점의 집합을 V, 간선의 집합을 E, 그래프를 G라고 했을 때 G=(V, E)라고 할 수 있다. 정점 A에서 B로 이동할 수 있는 방법을 경로(Path)라고 한다. 그래프 내에서 정점끼리의 path는 여러 개여도 된다. 또 두 정점 간 경로가 존재하지 않을 수도 있다. 정점 A에서 B로 가는 Path가 존재하면 정점 B는 정점 A로부터 reachable하다고 한다. 노드가 겹치지 않는 경로를 elementary하다고 하며 길이(length)는 엣지의 수를 나타낸다. 간선으로 연결되어 ..