Dinic演算法例子

2021-06-22 05:05:42 字數 1036 閱讀 7838

寫法:

(1)用鄰接矩陣儲存各個流的起點終點

(2)用bfs把圖分出層次(記錄到各個點需要流幾次)

(3)用dfs對圖找出增廣路進行流量擴充

注意反向流要記錄成容量為0的路徑,更新正向流時也要更新反向流(教材361頁)

#includeusing namespace std; 

struct edge

;edge edges[50][50];

int size = 6;

int visit[100], s = 0, t = 5;

int q[1000], d[1000];

void init()

} edges[0][1].cap = 10; edges[1][0].cap = 0;

edges[0][2].cap = 10; edges[2][0].cap = 0;

edges[1][3].cap = 4; edges[3][1].cap = 0;

edges[3][5].cap = 10; edges[5][3].cap = 0;

edges[1][4].cap = 8; edges[4][1].cap = 0;

edges[4][5].cap = 10; edges[5][4].cap = 0;

edges[2][4].cap = 9; edges[4][2].cap = 0;

}int bfs()

front = 0; tail = 1;

q[front] = s;

visit[0] = 1; d[0] = 0;

while(front < tail)

tail++;

}} if(!flag)

break; }

return visit[t];

}int dfs(int pos, int in) }

return flow;

}int maxflow()

return flow;

}int main()

分治演算法 例子

分治策略 將問題分解成若干個小的子問題,每個子問題與大問題同型 所以裡面可以用遞迴 但規模更小 遞迴解決這些子問題 將子問題的解答合併,獲得大問題的解答 最大欄位和問題 include include include using namespace std int a 100 int maxsum ...

排序演算法例子

氣泡排序 include using namespace std 氣泡排序,時間複雜度o n 2 穩定,比較次數最少n 1,最多n n 1 2 void bubble sort int list,int num int main bubble sort2 arraylist,len for int ...

模擬退火演算法例子

求解某乙個方程fun x 的極小值,很常見的以一種情況是當前的x不管增大還是減小,函式值fun x 均是增大,這時x就是極值。這是一種完完全全的貪心演算法。這樣求出的極小值,並不一定整段函式的全域性極小值,而極可能是區域性極小值。例如下圖 可以看出,有三個點,均是極小值點,在這是三個點處,不管增大變...