Loading...
2023. 8. 19. 02:46

DFS도 재귀보다는 반복문으로 구현 연습하기1

1. 문제 1987번: 알파벳 (acmicpc.net) 1987번: 알파벳 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으 www.acmicpc.net 2. 풀이1 기본적인 DFS문제긴한디 분명히 맞는데 시간초과에 애먹었다.. from sys import stdin def dfs(x,y,s): global answer for i in range(4): dx = x + d[i][0] dy = y + d[i][1] if dx >= 0 and dx = 0 and dy = 0 and dx = 0 and dy = 0 and dx = 0 and dy = 0 a..

2023. 8. 7. 01:13

그래프를 다루는 파이썬의 NetworkX 라이브러리 맛보기

1. NetworkX 그래프를 생성, 변경, 시각화하고 구조와 변화를 분석하는 함수들을 제공하는 파이썬의 라이브러리 속도가 느리나 사용이 편함 비슷한 라이브러리로 Snap.py(아마 Snap이 이름이겠지??)는 속도가 빠르나 사용이 불편하다고함 2. 그래프 시각화 nx.Graph()로 무방향 그래프, nx.DiGraph()로 방향 그래프를 초기화 #그래프의 생성과 초기화 G = nx.Graph() # 방향성이 없는 그래프 DiGraph = nx.DiGraph() # 방향성이 있는 그래프 초기화된 그래프 객체에 add_node를 이용해 그래프에 node를 추가할 수 있음 G.add_node(1) print("Num of nodes in G: " + str(G.number_of_nodes())) print(..

최소 스패닝 트리를 이용해서 그래프를 두 집합으로 분리하기(크루스칼 알고리즘 미세팁)

1. 문제 1647번: 도시 분할 계획 (acmicpc.net) 1647번: 도시 분할 계획 첫째 줄에 집의 개수 N, 길의 개수 M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번 www.acmicpc.net 2. 풀이 입력 자체가 "임의의 두 집 사이에 경로가 항상 존재하는 입력이 주어진다"라고 되어있는데 맨 처음에는 모든 정점에 대하여 서로 연결된 하나의 그래프 집합이 주어지는데.. 여기서 몇개의 간선을 선택해서 두 집합으로 분리하라는 문제 이 때 선택된 간선의 가중치 합이 최소가 되도록 만들어야한다 최소 스패닝 트리 이전에 그냥 진짜 단순하게 생각해보면, 초기에..

2023. 7. 23. 02:02

그래프의 연결 요소(connected component)

1. connected component connected component란 다음 두 조건을 모두 만족하는 node의 집합 1) 모든 node가 path로 연결이 가능하다 2) 하나의 node를 추가 했을 때 위 조건을 만족해서는 안된다. 쉽게 생각해서 서로 연결되어 모여있는 집합들이 연결요소다. {9} 하나의 경우도 위 network에서 하나의 연결요소다. 두번째 조건이 무슨 말인지 이해하기 어려운데 {1,2,3,4}의 경우 node 5를 추가하면 {1,2,3,4,5}는 첫번째 조건을 만족하므로 {1,2,3,4}는 연결요소가 아니라는 뜻이다. 2. giant connected component In many networks as the network grows the components get gra..

우선순위가 2개 이상인 다익스트라 알고리즘 연습

1. 문제1 16167번: A Great Way (acmicpc.net) 16167번: A Great Way 첫 번째 줄에 거점의 수 N과 경로의 개수 R이 주어진다. (2 ≤ N ≤ 100, 1 ≤ R ≤ 200) 모든 거점에는 1부터 N까지 번호가 매겨져 있으며 중앙대학교는 1번, 숭실대학교는 N번이다. 두 번째 줄부터는 R www.acmicpc.net 2. 풀이 다익스트라 알고리즘으로 최단거리만을 요구하는 문제가 기본문제고, 최단거리면서, 그러한 거리가 여러개인 경우 거쳐가는 노드가 최소가 되는 경로를 찾으라고 한다면? 접근 방법은 distance 배열 설정을 조금만 바꿔주면 된다 distance[v]를 출발점에서 v까지 가는데 가는 [비용, 거친 노드 수]로 정의해주자 "비용이 먼저 최소가 되면서..

다익스트라를 응용해서 minimum bottleneck path 문제 기본 배우기

1. 문제 23286번: 허들 넘기 (acmicpc.net) 23286번: 허들 넘기 첫째 줄에 세 정수 N, M, T가 주어진다. 다음 M개의 줄에 그래프 간선의 정보 u, v, h가 주어지고, u에서 v로 가는 간선이 있고, 높이가 h인 허들이 간선 중간에 놓여 있다는 의미이다. 마지막 T개의 www.acmicpc.net 2. 풀이 출발 정점에서 도착 정점으로 가는 길에 가중치가 가장 큰 간선의 가중치가 최소가 되는 경로를 찾는 문제 경로에서 가중치가 가장 큰 간선을 bottleneck path라고 부른다 이 bottleneck path의 가중치를 최소로 만드는 문제가 minimum bottleneck path problem 여러가지 방법이 있는것 같기는 한데.. 가장 기본은 다익스트라 알고리즘을 살..