自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

理想之国

still study 让我带着理想启程吧!

  • 博客(11)
  • 收藏
  • 关注

转载 二分图匹配【KM算法】

<br />KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[i],顶点Yi的顶标为B [i],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终 成立。KM算法的正确性基于以下定理: <br />若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,j)构成的子图(称做相等子图)有完备匹配,那么这个完备匹配就是二分图的最大权匹配。 <br />  这个定理

2011-02-24 20:44:00 657

原创 USACO 5.2.2

<br />还是比较水的一题<br />枚举+KMP<br /> <br />+++++++++++++++++++++++++++++++源程序+++++++++++++++++++++++++++++++<br />#include<stdio.h><br />#includ

2011-02-12 18:02:00 547

转载 最大流SAP算法

       距离标记最短增广路算法,复杂度是O(n^2*m),比EK要快得多,看了书上的原理,然后理解了伪代码,一下子就写过了,1459跑了130ms, 还需要改进啊, 挺高兴的终于学了网络流快一点的算法了,半期后把dinic和预留推进算法学了。       其实大致思路就是每次增广最短路径, 维护一个dis数组表示每个点到汇点的最小跳数,dis数组必须有这个性质: dis[i] 0); 定义一条允许弧:如果满足:dis[i] = dis[j] + 1( r[i][j] > 0);那么连接i,j的边就叫

2011-02-11 22:11:00 781

转载 非递归回溯算法求解n-皇后问题

n-皇后问题描述:在n×n格的棋盘上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,求解满足条件的棋盘布局。n-皇后问题是典型的可以使用回溯算法求解的问题。下面是n-皇后问题的实现求解算法,先给出使用C语言的实现,再转成Java实现。可以通过详细的程序注释来了解求解过程。C语言实现如下所示:#include #include #include #define N 8int column[N]; int chessboard[N][N]; //

2011-02-11 21:00:00 1989

转载 迷宫问题--非递归回溯 C语言实现

<br />零、注意要素 <br />1、在迷宫周围需要设置围墙(一圈的1) <br />2、每个点的走动,需要记录方向,(x,y,方向) <br />3、如果某点遇到围堵,回退,那么需要标记这个点是不通的。会退后的下一点再往该方向查找时,这一点是不通的,那么那一点需要判断其他方向,如果其他方向也不同则回溯,并且标记那一点也为不通的。 <br />4、stack的topPointer问题,topPointer是指向最上面的数据的上一个空间,<br />void PUSH(stackNode node,maz

2011-02-11 20:57:00 6532

转载 回溯法

一、  回溯的基本思想是:    从一个给定的起始位置,我们希望到达一个目的位置。我们重复地进行选择(可能是猜测)下一个位置应当是什么。如果一个给定的选择是有效的, 即新的位置可能位于通向目的位置的途径中,则前进到这个新的位置,然后继续。 如果一个给定的选择通向了死胡同 ,则回到前面的位置,进行其他的选择。回溯就是通过一系列位置选择到达目的位置,并且在不能到达目的位置时反向退回的策略。 通俗的讲法:从一条路往前走,能进则进,不能进则退回来,换一条路再试。算法书上可能这样说:回溯法是在包含问题的所有解的解空间

2011-02-11 11:29:00 1645

原创 Edmonds-Karp算法实现代码【原创】

#includeusing namespace std;const int maxn=220;int a[maxn][maxn],pre[maxn],m,n,ans;inline int work_work(){ int queue[maxn]={0},mark[maxn]={0},head=0,tail=1,i; queue[tail]=mark[1]=1; while(head!=tail) { head++; for(

2011-02-09 16:05:00 934

转载 Edmonds-Karp算法实现代码

<br />#include <cstdio>#include <iostream>#include <vector>#include <queue>#include <algorithm>#include <functional>#define Maxn 100#define Maxnum 99999999using namespace std;int n, f[Maxn][Maxn], g[Maxn][Maxn], s, t;int path[Maxn], p

2011-02-09 15:59:00 1649

原创 Edmonds-Karp算法

<br />基础的最大流算法,每次Bfs寻找最短路进行增广,这时候的增广和匈牙利算法的增广不同,找出一条残余路径就可以了。<br />然后对残余网络进行增广,不要忘记正向增广,相当于负向减少,也要在图中保存记录。<br />最后求一个割集来得到最大流。<br /> <br />最大流模型:<br />点:对点来说要求是进多少出多少<br />边:对边要求是不能超过最大容量,所以c的值为所有的残余边中的最小值<br /> <br />效率<br />O(VE2),效率可以满足一般题目要求。<br /> <br

2011-02-09 15:54:00 5589

转载 Ford-Fulkerson与Edmonds-Karp求解最大流

<br />       在算法导论中对求解最大流问题给出了一般性的解决方法,但并没有涉及到具体的实现。在这里我还是重新的对求解最大流的思想进行一般性的描述,然后再给出具体的实现。<br />      Ford-Fulkerson方法依赖于三种重要思想,这三个思想就是在上一篇网络流基础中提到的:残留网络,增广路径和割。Ford-Fulkerson方法是一种迭代的方法。开始时,对所有的u,v∈V有f(u,v)=0,即初始状态时流的值为0。在每次迭代中,可通过寻找一条“增广路径”来增加流值。增广路径可以看成是

2011-02-07 20:39:00 2914

转载 网络最大流——Ford-Fulkerson和Edmonds-Karp

最天下午又听了一节课,勉强把MaxiumFlow的两个算法写出来了。其实两个算法的不同之处就在于寻找“增广链”的方式——Ford-Fulkerson是随便找一条,我就用了DFS;Edmonds-Karp要求找一条节点数最少的,我用BFS。但就是这样的差别,两个程序的执行效率不可同

2011-02-07 20:33:00 1023

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除