Edmonds-Karp算法

本文介绍了一个基于 Edmonds-Karp 算法实现的最大流算法示例。该算法通过不断寻找残余网络中的增广路径来逐步增加从源点到汇点的流值,直至无法找到新的增广路径为止。文中提供了一个 Java 实现的例子,包括初始化有向图、执行 Edmonds-Karp 算法并输出最大流值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最大流算法

参考:http://www.cnblogs.com/jackge/archive/2013/05/05/3061893.html


package test;

import java.util.Arrays;
import java.util.LinkedList;

public class Edmonds_Karp_Test {

	public static void main(String[] args) {
		//输入一个图
		int [][] cap ={  {0,5,0,0,0},
					  	{0,0,6,0,1},
				        {0,0,0,5,2},
				        {0,0,0,0,1},
				        {0,0,0,0,0},
				        };//有向图的初始容量
		int max=EdmondsKarp(0, 4, cap);
		System.out.println(max);
		
	}
	public static int EdmondsKarp(int start,int end,int[][] cap){
		int [][] flow =new int [cap.length][cap[0].length];	//记录流量
		int [] pre = new int[cap.length];	//记录前一个节点
		int [] rest = new int[cap.length];	//记录剩余的流量,残量
		
		int maxflow = 0;
		
		for(int i=0;i<flow.length;i++){
			Arrays.fill(flow[i], 0);		
		}
		
		Arrays.fill(pre, 0);	
		
		LinkedList list = new LinkedList<Integer>();
		
		while(true){
//			System.out.println("yici");
			for(int j =0 ;j<rest.length;j++){//设置残量都为0
				rest[j] =0;
			}
			rest[start] = 10000000;	//设置起始位置的残量为一个很大的值
			list.add(start);
			while(!list.isEmpty()){			//BFS 寻找增广路
//				System.out.println("yici");
				int u = (int)list.pollFirst();
				for(int v =0;v<=end;v++){
					if(rest[v]==0 && cap[u][v]-flow[u][v] > 0){
						pre[v] =u;		//设置前面的节点
						rest[v] = Math.min(rest[u], cap[u][v]-flow[u][v]);//获取start到v节点的最小残量
						list.add(v);
					}
				}
			}
//			System.out.println(rest[end]+"rest[end]");
			
			maxflow += rest[end];
			
			if(rest[end] == 0){
				return maxflow;
			}
			
			for(int u=end;u!=start;u=pre[u]){	//从汇点往回走
				flow[pre[u]][u] += rest[end];	//更新正向流
				flow[u][pre[u]] -= rest[end];	//更新反向流
				System.out.print(u+" ");
			}
			
			System.out.print(start+"  ");
			
			System.out.println("寻找至本次的流为: "+maxflow);
		}
		
		
		
//		return maxflow;
	}
	
	//
	
}


安装Docker安装插件,可以按照以下步骤进行操作: 1. 首先,安装Docker。可以按照官方文档提供的步骤进行安装,或者使用适合您操作系统的包管理器进行安装。 2. 安装Docker Compose插件。可以使用以下方法安装: 2.1 下载指定版本的docker-compose文件: curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose 2.2 赋予docker-compose文件执行权限: chmod +x /usr/local/bin/docker-compose 2.3 验证安装是否成功: docker-compose --version 3. 在安装插件之前,可以测试端口是否已被占用,以避免编排过程中出错。可以使用以下命令安装netstat并查看端口号是否被占用: yum -y install net-tools netstat -npl | grep 3306 现在,您已经安装Docker安装Docker Compose插件,可以继续进行其他操作,例如上传docker-compose.yml文件到服务器,并在服务器上安装MySQL容器。可以参考Docker的官方文档或其他资源来了解如何使用DockerDocker Compose进行容器的安装和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Docker安装docker-compose插件](https://blog.youkuaiyun.com/qq_50661854/article/details/124453329)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Docker安装MySQL docker安装mysql 完整详细教程](https://blog.youkuaiyun.com/qq_40739917/article/details/130891879)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值