#include
#include
#include
#include
using namespace std; // Số các đỉnh trong đồ thị cho #define V 6 / * Trả về true nếu có một đường đi từ nguồn 's' chìm 't' trong đồ thị còn lại. Cũng đầy cha mẹ [] để lưu trữ đường dẫn * / bool BFS (int rGraph [V] [V], int s, int t, int cha mẹ []) { // Tạo một mảng đến thăm và đánh dấu tất cả các đỉnh như không truy cập bool thăm [V]; memset (truy cập, 0, sizeof (truy cập)); // Tạo một hàng đợi, đỉnh nguồn enqueue và đánh dấu đỉnh nguồn // như thăm hàng đợi
q;
q.push (s);
thăm [s] = true;
cha mẹ [s] = -1; // Chuẩn BFS vòng while (q.empty ()) { int u = q.front (); q. pop (); for (int v = 0; v
{
If (viếng thăm [v] == false && rGraph [u] [v]> 0)
{
q.push (v);
cha mẹ [v] = u;
thăm [v] = true;
}
}
} // Nếu chúng tôi bồn rửa đạt trong BFS bắt đầu từ mã nguồn, sau đó trở về // true, khác giả trở lại (đến thăm [t] == true); } // trả TNE lưu lượng tối đa từ s đến t trong đồ thị cho int fordFulkerson (int đồ thị [V] [V], int s, int t) { int u, v; // Tạo một biểu đồ còn lại và điền vào biểu đồ còn lại với // năng lực đưa ra trong đồ thị ban đầu là năng lực dư // trong dư đồ int rGraph [V] [ V]; // Dư đồ nơi rGraph [i] [j] chỉ ra // suất còn lại của cạnh từ i tới j (nếu có // là một cạnh. Nếu rGraph [i] [j] là 0, sau đó không có) cho ( u = 0; u <V; u ++) for (v = 0; v <V; v ++) rGraph [u] [v] = đồ thị [u] [v]; int cha mẹ [V]; // Mảng này được lấp đầy bởi BFS và để lưu trữ đường int max_flow = 0; // Không có dòng chảy ban đầu // Tăng thêm dòng chảy trong khi tere là đường đi từ nguồn chìm trong khi (BFS (rGraph, s, t, mẹ)) { // Tìm công suất dư tối thiểu của edhes dọc // con đường lấp đầy bởi BFS. Hoặc chúng ta có thể nói rằng tìm thấy lưu lượng tối đa // thông qua con đường được tìm thấy. Int path_flow = INT_MAX; for (v = t;! V = s; v = cha mẹ [v]) { u = cha mẹ [v]; path_flow = min ( path_flow, rGraph [u] [v]); } // cập nhật dung lượng còn lại của các cạnh và đảo ngược các cạnh // dọc theo con đường cho (v = t;! v = s; v = cha mẹ [v]) { u = mẹ [v]; rGraph [u] [v] - = path_flow; rGraph [v] [u] + = path_flow; } // Thêm dòng đường dẫn đến dòng chảy chung max_flow + = path_flow; } // Return tổng dòng chảy max_flow trở lại; } // chương trình điều khiển để kiểm tra trên các chức năng int main () { // Hãy để chúng tôi tạo ra một biểu đồ thể hiện trong ví dụ trên int đồ thị [V] [V] = {{0, 16, 13, 0, 0, 0}, {0, 0, 10, 12, 0, 0}, {0, 4, 0, 0, 14, 0}, {0, 0, 9, 0, 0, 20}, {0, 0, 0, 7 , 0, 4}, {0, 0, 0, 0, 0, 0} }; cout << "dòng chảy tối đa có thể là" << fordFulkerson (đồ thị, 0, 5); return 0; }
đang được dịch, vui lòng đợi..