2013年8月1日

邻接表

摘要: 用到的数据结构是一个是顶点表,包括顶点和指向下一个邻接点的指针一个是边表, 数据结构跟顶点不同,存储的是顶点的序号,和指向下一个的指针刚开始的时候把顶点表初始化,指针指向null。然后边表插入进来,是插入到前一个,也就是直接插入到firstedge指向的下一个,而后面的后移来自http://blog.csdn.net/linxinyuluo/article/details/6847851 阅读全文

posted @ 2013-08-01 14:35 blieveboy 阅读(119) 评论(0) 推荐(0) 编辑

拓扑资料

摘要: 对于一条有向边(u,v),定义u<v;满足所有这样条件的结点序列称为拓扑序列。拓扑排序就是求一个有向图的拓扑序列的算法。一个有向图顶点的拓扑序列不是惟一的。并不是任何有向图的顶点都可以排成拓扑序列,有环图是不能排的。例子:比如排课问题,比如士兵排队问题等。拓扑排序在实际生活中和算法中都有很大的应用。比如要排一下几门课程的先后次序,我们可以把课程抽象成结点,把什么课是什么课的基础抽象成边,那么该图的一个拓扑序列就是这些课的一个可行的先后次序。各种语言的编译器都用到了拓扑排序。 数学基础: 什么是拓扑排序(Topological Sort)?简单地说,由某个集合上的一个偏序得到该集合上的一个 阅读全文

posted @ 2013-08-01 11:25 blieveboy 阅读(200) 评论(0) 推荐(0) 编辑

2013年7月31日

滚动数组

摘要: 在DP中使用"滚动数组"举个简单的例子:int d[]=new int[100];d[0]=1;d[1]=1;for(int i=2;i<100;i++)d[i]=d[i-1]+d[i-2];System.out.printf("%d",d[99]);上面这个循环d[i]只需要解集中的前2个解d[i-1]和d[i-2];为了节约空间用滚动数组的方法int d[]=new int[3];d[0]=1;d[1]=1;for(int i=2;i<100;i++)d[i%3]=d[(i-1)%3]+d[(i-2)%3];System.out.prin 阅读全文

posted @ 2013-07-31 14:31 blieveboy 阅读(126) 评论(0) 推荐(0) 编辑

2013年7月30日

【转】C语言的位运算的优势

摘要: 位运算加速技巧1.如果乘上一个2的倍数数值,可以改用左移运算(Left Shift) 加速 300%x = x * 2;x = x * 64;//改为:x = x > 1;// 2 = 21x = x >> 6;// 64 = 263.数值转整数加速 10%x = int(1.232)//改为:x = 1.232 >> 0;4.交换两个数值(swap),使用 XOR 可以加速20%var t:int = a;a = b;b = t;//equals:a = a^b;b = a^b;a = a^b;5.正负号转换,可以加入 300%i = -i;//改为i = ~i 阅读全文

posted @ 2013-07-30 10:11 blieveboy 阅读(181) 评论(0) 推荐(0) 编辑

2013年7月25日

转载ACM学习建议(以此鼓励自己)

摘要: 一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.acm主要是考算法的,主要时间是花在思考算法上,不是花在写程序与debug上。 下面给个计划你练练: 第一阶段: 练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打出来. 1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成树(先写个prim,kruscal要用并查集,不好写) 3.大数(高精度)加减乘除 4.二分查找. (代码可在五行以内) 5.叉乘、判线段相交、然后写个凸包. 6.BFS、DFS, 阅读全文

posted @ 2013-07-25 20:03 blieveboy 阅读(136) 评论(0) 推荐(0) 编辑

导航