演算法導論 最大流 Push Relabel

2021-08-07 05:43:31 字數 1602 閱讀 7561

#include

#include

#include

//圖節點    

typedef struct vertexnode    

vertex,*pvertex;    

//圖    

typedef struct     

graph,*pgraph;    

//根據演算法導論 圖26-6初始化圖  

pgraph initgraph()    

for(int i=0;ivn;i++)    

}    

g->e[0][1]=16;  

g->e[0][2]=13;  

g->e[1][3]=12;    

g->e[2][1]=4;    

g->e[2][4]=14;    

g->e[3][2]=9;  

g->e[3][5]=20;  

g->e[4][3]=7;  

g->e[4][5]=4;   

return g;    

}    

void initresidualnetwork(pgraph g)  

}  for(int i=0;ivn;i++)    

}    

}    

}  void initializepreflow(pgraph g,int s)  

for(int i=0;ivn;i++)    

}  g->v[s]->h=g->vn;  

for(int i=0;ivn;i++)  

}  }  void push(pgraph g,int u,int v)  

else  

//更新超額流  

g->v[u]->e-=d;  

g->v[v]->e+=d;  

//更新殘存圖  

if(g->e[u][v]>0)  

}  //進入函式時,預設保證g->v[u]->e>0  

//返回能從u進行push的鄰接頂點位置  

//返回-1代表殘留圖中該頂點無鄰接點  

int relabel(pgraph g,int u)  

}  }  }  

if(minhv[u]->h=minh+1;  

return minpos;  

}  else//u沒有鄰接點時走到這裡  

return -1;  

}  void printflow2(pgraph g)  

}  printf("\n");  

for(int i=0;ivn;i++)  

}  }  bool moreoperation(pgraph g,int s,int t)  

}  return false;  

}  void genericpushrelabel(pgraph g,int s,int t)  

;  }  

void printflow(pgraph g)  

}  }  int calcumaxflow(pgraph g,int s)

return maxflow;

}void main()  

演算法導論之最大流

流網路g v,e 是乙個有向圖,其中每條邊 u,v e均有乙個非負能量c u,v 0。如果 u,v e,則假定c u,v 0。流網路中有兩個特點的頂點,源點s和匯點t,假定每個頂點均處於從源點到匯點的某條路徑上,就是說,對每個頂點v v,存在一條路徑s v t,因此圖g是連通圖,且 e v 1。設g...

演算法導論 最大流 Edmonds Karp演算法

華電北風吹 天津大學認知計算與應用重點實驗室 2016 07 20 有向圖的最大流演算法 模板。利用廣度優先搜尋尋找殘量網路增廣路。include include include using namespace std define maxn 10 define int min 0x80000000...

最大流演算法

基本的知識,解決什麼問題這些東西就不說啦。演算法導論和很多大神部落格都講解的很詳細。它其實就是不停的找增廣路直到找不到為止。此時通過的所有流量就是最大流量。ford fulkerson 最大流演算法 下面是我的實現。參考了最大流ford fulkerson的演算法實現 include include...