SAP和ISAP(网路最大流的两个增广路算法)

ISAP是对SAP进行优化后的算法,ISAP时间复杂度为O(V^2E),SAP的时间复杂度为O(VE^2)

 

SAP

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <iomanip>
  4. #include <queue>
  5. using namespace std;
  6. const int maxn = 100;
  7. const int INF = (1 << 30) - 1;
  8. int g[maxn][maxn];//残余网络
  9. int f[maxn][maxn];//实流网络
  10. int Prev[maxn];//保存前驱节点
  11. bool visited[maxn];
  12. int n, m;
  13. bool BFS(int s,int t)
  14. {
  15.     int i;
  16.     memset(Prev, -1, sizeof(Prev));
  17.     memset(visited, false, sizeof(visited));//初始化
  18.     queue<int> q;
  19.     visited[s] = true;
  20.     q.push(s);
  21.     while (!q.empty())
  22.     {
  23.         int now = q.front();
  24.         q.pop();
  25.         for (i = 1; i <= n; i++)
  26.         {
  27.             if (!visited[i] && g[now][i]>0)//没被访问并且有边相连
  28.             {
  29.                 visited[i] = true;
  30.                 Prev[i] = now;
  31.                 if (i == t)return true;//找到一条增广路劲
  32.                 q.push(i);
  33.             }
  34.         }
  35.     }
  36.     return false;
  37. }
  38. int EK(int s, int t)
  39. {
  40.     int v, w, d, maxflow;
  41.     maxflow = 0;
  42.     while (BFS(s, t))//还有增广路径
  43.     {
  44.         v = t;
  45.         d = INF;
  46.         while (v != s)//向前找
  47.         {
  48.             w = Prev[v];
  49.             if (d > g[w][v])
  50.             {
  51.                 d = g[w][v];
  52.             }
  53.             v = w;
  54.         }
  55.         maxflow +=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值