본문 바로가기

그래프4

[BOJ] 16930 달리기 문제 16930번: 달리기 진영이는 다이어트를 위해 N×M 크기의 체육관을 달리려고 한다. 체육관은 1×1 크기의 칸으로 나누어져 있고, 칸은 빈 칸 또는 벽이다. x행 y열에 있는 칸은 (x, y)로 나타낸다. 매 초마다 진영이는 www.acmicpc.net 진영이는 다이어트를 위해 N×M 크기의 체육관을 달리려고 한다. 체육관은 1 ×1 크기의 칸으로 나누어져 있고, 칸은 빈칸 또는 벽이다. x행 y열에 있는 칸은 \((x, y)\)로 나타낸다. 매 초마다 진영이는 위, 아래, 오른쪽, 왼쪽 중에서 이동할 방향을 하나 고르고, 그 방향으로 최소 1개, 최대 K개의 빈칸을 이동한다. 시작점 \((x_1, y_1)\)과 도착점 \((x_2, y_2)\)가 주어졌을 때, 시작점에서 도착점으로 이동하는 최소.. 2023. 3. 24.
BFS에서 다익스트라 알고리즘까지 Single source shortest path unweighted graph → BFS weighted graph with nonnegative weights → Dijkstra weighted graph with negative weights → Bellman-ford, SPFA directed acyclic graph → topological sorting 용어 정의 경로의 길이 : 경로가 지나는 간선의 가중치의 합 정점 \(u\)에서 정점 \(v\)의 최단경로 : u에서 v로 가는 경로의 길이가 최소인 경로 간선의 완화(edge relaxation) : 정점 \(u\)에서 \(v\)로의 간선에 대해 dist[\(v\)] > dist[\(u\)] + weight(\(u, v\)) 만족하면 dist.. 2022. 8. 6.
그래프에서 최장거리 그래프에서 최단거리는 경우에 따라 BFS, 다익스트라, 벨만 포드, 플로이드 와샬을 사용하여 구할 수 있다. 그렇다면 최장거리는 어떻게 구할 수 있을까? 사이클이 없는 무향 그래프(트리)에서 최장거리 트리에서는 어떤 두 노드를 선택해도 둘 사이의 경로가 항상 하나만 존재한다. 따라서 BFS을 이용하여 구할 수 있다. 사이클이 없는 유향 그래프에서 최장거리 일반적인 그래프에서 최장거리를 구하는 방법은 NP-Hard로 알려져 있다. 하지만 DAG(Directed Acyclic Graph)에서는 구할 수 있다. DAG에서 최장거리를 구할 수 있는 2가지 방법을 정리해보자. 동적 계획법 정점 $u$ → $v$의 최장거리를 구하는 점화식을 아래와 같이 세워보자. $$ D[i] = \text{정점 } i \text.. 2022. 7. 13.
그래프에서 사이클 찾기 사이클(Cycle) 이란 그래프에서 사이클은 한 정점에서 시작하여 어떤 경로를 지나 다시 그 정점으로 돌아오는 경로를 말한다. 유향, 무향 그래프에서 사이클을 찾는 방법을 알아보자. 유향 그래프에서 사이클 찾기 유향 그래프에서 사이클은 DFS를 사용해 찾을 수 있다. DFS 수행 중 역행 간선이 있다면 그래프 내 사이클이 있다고 판별할 수 있다. #include using namespace std; int visited[10]; vector adj[10]; bool dfs(int here) { visited[here] = 1; for(int& there : adj[here]) { if(visited[there]) return true; if(dfs(there)) return true; } return f.. 2022. 6. 6.