了解最大流量 Edmond Karps 算法

问题描述

我正在尝试了解我的家庭作业的 edmond karp 算法。我找到了一个关于最大流算法的网站,并且有一个运行流畅的 cod。但是,对代码没有评论。因为我不能了解变量名称以及代码的工作原理。我希望有人可以帮助我使用该算法。我将给出下面的链接和代码。如果有人可以解释变量及其用途,我将不胜感激。 如果您能找到导致瓶颈的边缘,那就太好了。我如何确定此代码中的边缘导致瓶颈。

https://sites.google.com/site/indy256/algo/edmonds_karp

public class MaxFlowEdmondsKarp {

  static class Edge {
    int s,t,rev,cap,f;

    public Edge(int s,int t,int rev,int cap) {
      this.s = s;
      this.t = t;
      this.rev = rev;
      this.cap = cap;
    }
  }

  public static List<Edge>[] createGraph(int nodes) {
    List<Edge>[] graph = new List[nodes];
    for (int i = 0; i < nodes; i++)
      graph[i] = new ArrayList<>();
    return graph;
  }

  public static void addEdge(List<Edge>[] graph,int s,int cap) {
    graph[s].add(new Edge(s,graph[t].size(),cap));
    graph[t].add(new Edge(t,s,graph[s].size() - 1,0));
  }

  public static int maxFlow(List<Edge>[] graph,int t) {
    int flow = 0;
    int[] q = new int[graph.length];
    while (true) {
      int qt = 0;
      q[qt++] = s;
      Edge[] pred = new Edge[graph.length];
      for (int qh = 0; qh < qt && pred[t] == null; qh++) {
        int cur = q[qh];
        for (Edge e : graph[cur]) {
          if (pred[e.t] == null && e.cap > e.f) {
            pred[e.t] = e;
            q[qt++] = e.t;
          }
        }
      }
      if (pred[t] == null)
        break;
      int df = Integer.MAX_VALUE;
      for (int u = t; u != s; u = pred[u].s)
        df = Math.min(df,pred[u].cap - pred[u].f);
      for (int u = t; u != s; u = pred[u].s) {
        pred[u].f += df;
        graph[pred[u].t].get(pred[u].rev).f -= df;
      }
      flow += df;
    }
    return flow;
  }

  // Usage example
  public static void main(String[] args) {
    List<Edge>[] graph = createGraph(3);
    addEdge(graph,1,3);
    addEdge(graph,2,2);
    addEdge(graph,2);
    System.out.println(4 == maxFlow(graph,2));
  }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...