OPEN17的个人小站
from math import inf
N=1e3+5
dist=[[inf for _ in range(N)] for _ in range(N)]
def init(n):
for i in range(n):
# 到自身最短路为0
dist[i][i]=0
def floyd(n):
for k in range(n):
for i in range(n):
for j in range(n):
dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j])
from heapq import nsmallest, nlargest, heappushpop, heapify, heappop, heappush
from math import inf
def dijkstra(graph, src):
n=len(graph)
dist=[inf]*n
dist[src]=0
visited=[0]*n
heap=[(0,src)]
while heap:
d,u=heappop(heap)
if visited[u]:
continue
visited[u]=1
for v,w in graph[u]:
dist[v]=min(dist[v],dist[u]+w)
heappush(heap,(dist[v],v))
return dist
from collections import deque
def spfa(graph, src):
"""
src: 源节点
graph: 邻接表形式的图
"""
V = len(graph)
dist = [float("Inf")] * V
dist[src] = 0
queue = deque()
queue.append(src)
in_queue = [0] * V
in_queue[src] = 1
while queue:
u = queue.popleft()
in_queue[u] = 0
for v, w in graph[u]:
if dist[u] + w < dist[v]:
dist[v] = dist[u] + w
if not in_queue[v]:
queue.append(v)
in_queue[v] = 1
return dist
from math import inf
N=1e3+5
dist=[[inf for _ in range(N)] for _ in range(N)]
def init(n):
for i in range(n):
# 到自身最短路为0
dist[i][i]=0
def floyd(n):
for k in range(n):
for i in range(n):
for j in range(n):
dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j])
from heapq import nsmallest, nlargest, heappushpop, heapify, heappop, heappush
from math import inf
def dijkstra(graph, src):
n=len(graph)
dist=[inf]*n
dist[src]=0
visited=[0]*n
heap=[(0,src)]
while heap:
d,u=heappop(heap)
if visited[u]:
continue
visited[u]=1
for v,w in graph[u]:
dist[v]=min(dist[v],dist[u]+w)
heappush(heap,(dist[v],v))
return dist
from collections import deque
def spfa(graph, src):
"""
src: 源节点
graph: 邻接表形式的图
"""
V = len(graph)
dist = [float("Inf")] * V
dist[src] = 0
queue = deque()
queue.append(src)
in_queue = [0] * V
in_queue[src] = 1
while queue:
u = queue.popleft()
in_queue[u] = 0
for v, w in graph[u]:
if dist[u] + w < dist[v]:
dist[v] = dist[u] + w
if not in_queue[v]:
queue.append(v)
in_queue[v] = 1
return dist