ACM 理论基础
leeeyupeng
驰骋沙场,万马行空。
展开
-
强连通分量
1. Kosaraju算法(双DFS)2.Tarjan算法 3.Gabow一.Kosaraju算法算法的核心实现是,首先DFS一遍,得到一个DFS森林,在此过程中得到所有点的拓扑序列(按结束时间由高到低),之后我们建一个反向图,按反拓扑序(结束时间由高到低)进行第二次DFS,则此时得到的每一棵树都是一个强连通分量,这个画个图演示一下比较好理解,严格证明还是参考算法导论340页较好,感性的认识是,假定我们有C1,C2两个强连通分量,而在反拓扑序中C1是在C2前面的,此时说明G中第一遍DFS原创 2010-08-21 10:30:00 · 490 阅读 · 0 评论 -
好的blog
<br />强连通分量:http://www.byvoid.com/blog/scc-tarjan/zh-hans/原创 2010-08-21 10:36:00 · 374 阅读 · 0 评论 -
错排公式
递推的方法推导错排公式 当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用M(n)表示,那么M(n-1)就表示n-1个编号元素放在n-1个编号位置,各不对应的方法数,其它类推. 第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法; 第二步,放编号为k的元素,这时有两种情况.1,把它放到位置n,那么,对于剩下的n-2个元素,就有M(n-2)种方法;2,不把它放到位置n,这时,对于这n-1个元素,有M(n-1)种方法; 综上得到 M(n)=(n-1)[M(n原创 2010-08-23 16:24:00 · 481 阅读 · 0 评论 -
string对象与数值转换 串流操作 stringstream学习
#include#include#include#includeusing namespace std;string tostring(double x)//int输出地挺好的但是还you使用double可能输出科学型{ ostringstream o; if(o>x)return x;}int main(){ char b[10]={NULL}; string a; int c=58; double d=c;原创 2010-08-23 16:04:00 · 1277 阅读 · 0 评论 -
平衡二叉树
平衡二叉树又被称为AVL树(区别于AVL算法),它是一棵二叉排序树,且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。原创 2010-08-20 15:40:00 · 906 阅读 · 0 评论 -
序列容器
vector1.以类似于普通数组的方式存储类型为 T 的对象,只是它的容量可以根据需要存储的对象个数进行调整。2.使用下标运算符[]可以像数组那样访问vector容器中的元素。3.vector容器的大小是其中元素的个数--调用size()来获得容器的大小; vector容器的容量是当前它可以包含的最大元素个数--调用capacity()来获得容器的大小。 (在创建特定容量的vector对象时,其大小和容量是相同的) 如:std::vector a(10) (如果给原创 2010-08-20 18:56:00 · 936 阅读 · 0 评论 -
最大流
<br />下面,针对这个模型的算法,以程序设计的思维来进行阐释。note:F为总的流量;对于每一条弧,我们有一个限制容量L(i,j)==L(j,i)指明该弧不能超过的流量,属于标量(也就是中学物理中不具方向属性的量);C(i,j)为一个向量(与标量相反,具有方向属性的量),指明(i,j)弧当前还能允许通过多少流量(注意是从i到j);以下的s代表源点,e代表汇点。step1:初始化。F=0,该模型的每一条弧C(i,j)=L(i,j)。主程序启动:step2:搜索一条增广路(就是在当前情况下能转载 2010-09-02 18:10:00 · 533 阅读 · 0 评论 -
A*算法
最短路径算法比较一文中,看到A*算法,可以使用曼哈顿距离、欧式距离、切比雪夫距离三种不同的估算方法 我们可以定义曼哈顿距离的正式意义为L1-距离或城市区块距离,也就是在欧几里德空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和。例如在平面上,坐标(x1, y1)的点P1与坐标(x2, y2)的点P2的曼哈顿距离为: |x1 - x2| + |y1 - y2|.曼哈顿距离——转载 2011-10-20 17:55:23 · 2199 阅读 · 0 评论