摘要: 1:关于五子棋的界面的实现----用位数组,一个int代表一行又16个点。每个点用2个bit来表示空,白,黑。可以编写两个函数,分别为获取(x,y)的棋子的类型,另外一个是设置(x,y)的棋子的类型。c++又位操作这个库,可以直接包含这个库进行操作。网址为:http://baike.baidu.com/view/2479473.htm。 阅读全文
posted @ 2012-07-15 11:35 gui__li 阅读(176) 评论(0) 推荐(0)
摘要: 文件指示器,restrict 阅读全文
posted @ 2012-07-08 11:16 gui__li 阅读(131) 评论(0) 推荐(0)
摘要: ungetc,输入端,第一个 阅读全文
posted @ 2012-07-07 18:08 gui__li 阅读(474) 评论(0) 推荐(0)
摘要: 应该采用选择树,而选择树有胜者树还有败者树,更加常用的是败者树。败者树的第二个节点是次优的节点。第一个节点是全优节点。 图在相册里面。  阅读全文
posted @ 2011-06-08 21:01 gui__li 阅读(219) 评论(0) 推荐(0)
摘要: 快速排序: 这个思想不仅可以用于排序,还可以用于求第k个数字。 代码: QuickSort(int*arr , int left,int right) { If(left>=right) Return; Intpivot,i,j; Pivot=left; I=left; J=right; While(i<=j) { While(arr[i]<=a[pivot]&&i<=j)i++; If(i>j) break; While(arr[j]>a[pivot]&&i<=j)j--; If(i>j) break; Swap 阅读全文
posted @ 2011-06-08 20:38 gui__li 阅读(187) 评论(0) 推荐(0)
摘要: 先来分析一下o(n*n)的算法:第一种:插入排序:插入排序的时候可以一边比较一边交换。顺便运用了冒泡的思想。代码:For(i=1;i<=n;i++) For(j=I;j>0;j--){If(array[j]>array[j-1]) Swap(array[j],array[j-1]);} 优化算法: 先找i的位置,找的时候就把那些需要往后面移动的就移动了,这个时候是一次赋值操作,所以比较快。 再一步优化:的时候可以用二分查找那个I的位置。二分查找代码: While(left<=right) { Middle=(left+right)/2; If(temp<array 阅读全文
posted @ 2011-06-07 20:38 gui__li 阅读(210) 评论(0) 推荐(0)
摘要: 分割数组,使得分开的数组的和差不多。将一个数组分成和差不多的两个数组。数组个数为2n个。 Arr[i][k]=true;的定义是i个元素的和为k的存在。 For(i=1;i<=2*n;i++) { for(k=min(n-1,i-1);k>=0;k--) for(j=sum/2;j>=0;j--) if(j>a[i]&&arr[k-1][j-a[j]==true) arr[k][j]=true; }对于循环。如果两个循环变量没有什么关系,我觉得调换循环的次序应该没有什么问题的。 求两个数字的和为指定的一个数字。 最快的算法是:先对数组进行排序。o(nlg 阅读全文
posted @ 2011-06-03 11:08 gui__li 阅读(196) 评论(0) 推荐(0)
摘要: 总的来说是深度遍历。以根为节点建立并查集。比如说求p,v的lca。当访问到p的时候检查v是否已经访问过。如果访问过,那么他们的lca就是v现在所在的并查集里面的元素。如果没有访问到。那么等到v访问到的时候可以操作一下。 充分利用了递归这个操作,所以不必要保存以前的东西,自然而然的就将u里面的所有的子节点子孙节点都和并到一块去了。 这个想了比较长的时间。 这个是伪代码 LCA(u) {Make-Set(u)ancestor[Find-Set(u)]=u对于u的每一个孩子v {LCA(v)Union(u)ancestor[Find-Set(u)]=u}checked[u]=true对于每个(u,. 阅读全文
posted @ 2011-06-02 16:33 gui__li 阅读(289) 评论(0) 推荐(0)
摘要: 求一个数组中的最高和次高。 if(h>h1) { h2=h1;h1=h; } else if(h>h2) { h2=h; } 阅读全文
posted @ 2011-05-31 10:13 gui__li 阅读(140) 评论(0) 推荐(0)
摘要: 矩阵乘法:最初版。也是最简单明了的版本。 for(i=0;i<n;i++) for(j=0;j<n;j++) for(k=0;k<n;k++) a[i][j]+=a[i][k]*a[k][j]; 稍微的改进: 算法上可以用分治法来进行处理,假设n是2的倍数。将其分成4个小矩阵。这样可以减少乘法的次数,改用加法。算法效率基本稍微提高到。logn*(v的3次方) 还有一种改进是用先求的一些数字,用过这些数字组合来进行减少乘法加法的个数。进而达到减少算法时间的目的。 阅读全文
posted @ 2011-05-19 09:57 gui__li 阅读(257) 评论(0) 推荐(0)