寫法:
(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就是極值。這是一種完完全全的貪心演算法。這樣求出的極小值,並不一定整段函式的全域性極小值,而極可能是區域性極小值。例如下圖 可以看出,有三個點,均是極小值點,在這是三個點處,不管增大變...