用Python写最大流
class MaxFlow():
def __init__(self, graph):
self.origin_graph = graph
self.flow_graph = graph
self.num_node = len(self.origin_graph)
def bfs_search(self, start, end):
self.visited = [0 for _ in range(self.num_node)]
self.previous_node = [-1 for _ in range(self.num_node)]
queue = []
queue.append(start)
self.visited[start] = 1
while queue:
cur_node = queue[0]
queue.pop(0)
for next_node in range(self.num_node):
if self.visited[next_node] == 0 and self.flow_graph[cur_node][next_node] > 0:
self.visited[next_node] = 1
self.previous_node[next_node] = cur_node
queue.append(next_node)
if next_node == end:
return True
return False
def calc_flow(self, start, end):
flow_capacity = float('inf')
node = end
while node != start:
pre_node = self.previous_node[node]
flow_capacity = min(flow_capacity, self.flow_graph[pre_node][node])
node = pre_node
node = end
while node != start:
pre_node = self.previous_node[node]
self.flow_graph[pre_node][node] -= flow_capacity
self.flow_graph[node][pre_node] += flow_capacity
node = pre_node
return flow_capacity
def EK_algorithm(self, start, end):
max_flow = (-1) * float('inf')
while(self.bfs_search(start, end)):
max_flow = max(max_flow, self.calc_flow(start, end))
return max_flow
graph = [[0,1],[1,0]]
MaxFlow.bfs_search(graph,1,0)