pku 1273_Drainage Ditches 最大流问题

本文介绍了一种解决经典网络流问题的方法——Ford-Fulkerson算法,并提供了详细的C++实现代码。通过不断寻找并更新增广路径来求解最大流问题。

经典网络流问题,使用Ford Fulkson算法。


思路大概是:求排水沟网络中的最大排水量。

从源点开始,每次寻找一条增广路径,更新一次,再重新找增广路径……直到没有为止。即每次寻找一条由源点到汇点的路径;

把路径全部找完之后,剩余网络是最优网络,即能实现最大流。

寻找增广路径时我使用了广搜,这是比较容易实现的过程。

详细代码:

Source Code

Problem:1273 User:moxiaomomo
Memory:332K Time:0MS
Language:C++ Result:Accepted
  • Source Code
  • Source Code
    
    Problem: 1273		User: moxiaomomo
    Memory: 332K		Time: 0MS
    Language: C++		Result: Accepted
    Source Code
    #include<iostream>
    using namespace std;
    
    int N,M;
    
    int cost[205][205],r;
    int Min[205],pre[205];    
    bool visit[205];   //搜索标记
    
    int bfs()
    {
    	int q[205],start = 0,end = 0;
    	memset(visit,false,sizeof(visit));
    	q[0] = 1;         //以n点为搜索起点
    	visit[1]=true;
    	Min[1]=10000005;
    	while(start<=end)     //搜索的最后一个点将是n+1
    	{
    		int t=q[start];      //下面进行点t的广搜
    		for(int i=1;i<=M;++i)
    		{
    			if(!visit[i]&&cost[t][i]!=0)
    			{   //Min[t],最小值传递;如果前向节点记录的值比当前的边的值要大,则...
    				Min[i]=(Min[t]<cost[t][i])? Min[t] : cost[t][i];
    				//Min[t]的作用是记录路径中权值最小的边
    				pre[i]=t;         //i的前向节点为t,在搜索过程中不断更新
    				if(i==M)
    				{return Min[M];}     //搜索完毕
    				visit[i]=true;
    				q[++end]=i;     //将i并入已搜索的集合
    			}
    		}
    		start++;      //进行下一个点的广搜
    	}
    	if (visit[M])      //如果最后一个点被搜索到,则说明存在增广路径
           return Min[M];
        else return -1 ;
    }
    
    void Ford_Fulkerson()
    {
    	int max=0,t,pre_t;
    	while((r = bfs()) != -1) //存在增广路径
    	{
    		max+=r; //最后max的值将是最大流的值
    		t=M;
    		while(t!=1)
    		{
    			pre_t=pre[t]; //找出前向点
    			cost[pre_t][t]-=r;    //前向路径值减一
    			cost[t][pre_t]+=r;    //后向路径值加一
    			t=pre_t;      //更新前向点
    		}
    	}
    	printf("%d/n",max);
    }
    
    int main()
    {
    	int k,x,y;
    	while(scanf ("%d%d",&N,&M) != EOF)
    	{
    		memset(cost,0,sizeof(cost));
    
    		for(int i=0;i<N;++i)
    		{
    			scanf("%d%d%d",&x,&y,&k);
    			cost[x][y]+=k;
    		}
    
    		Ford_Fulkerson();
    	}
    
        return 0;
    }

### 关于 PKU_Campus 数据库文件格式及其用途 在 IT 领域中,`pku_campus.db` 文件通常是一个 SQLite 数据库文件。SQLite 是一种轻量级的关系型数据库管理系统,广泛用于嵌入式应用和小型项目中[^4]。以下是关于 `pku_campus.db` 的可能格式和用途: #### 1. **文件格式** SQLite 数据库文件的标准扩展名为 `.db` 或 `.sqlite`。这种文件本质上是以二进制形式存储的数据表集合,支持 SQL 查询语言。可以通过以下命令查看其结构: ```bash sqlite3 pku_campus.db ``` 运行上述命令后,可以执行如下操作来了解数据表的内容: ```sql .tables -- 查看所有表格名称 .schema table_name -- 查看特定表格的定义 SELECT * FROM table_name LIMIT 10; -- 浏览前几条记录 ``` #### 2. **潜在用途** 根据命名惯例,“PKU Campus” 可能指北京大学校园相关的某个系统或应用程序。因此,该数据库文件可能是为了管理与校园活动、学生信息或其他资源有关的数据而设计的。 - 如果涉及学生活动,则可能会有类似于 `students`, `events`, 和 `registrations` 这样的表格。 - 若是科研领域中的工具包组件之一,则需进一步确认具体上下文环境下的功能定位[^5]。 另外值得注意的是,在某些情况下,此类数据库也可能被用来保存地理空间信息(GIS),特别是当它关联到地图服务或者位置追踪类软件时[^6]。 #### 示例代码展示如何连接并查询此类型的 SQLite 数据库 下面提供了一个简单的 Python 脚本例子,演示怎样加载以及读取一个 SQLite 数据库内的基本信息: ```python import sqlite3 conn = sqlite3.connect('pku_campus.db') cursor = conn.cursor() # 获取所有的表名 cursor.execute("SELECT name FROM sqlite_master WHERE type='table';") tables = cursor.fetchall() print(f"Tables found: {tables}") for table in tables: tableName = table[0] print(f"\nData from Table '{tableName}': ") try: cursor.execute(f'SELECT * FROM "{tableName}" LIMIT 5') rows = cursor.fetchall() for row in rows: print(row) except Exception as e: print(e) conn.close() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值