代码改变世界

排序算法-------冒泡排序及其优化

2011-10-01 20:54 by ...平..淡..., 490 阅读, 0 推荐, 收藏,
摘要:冒泡排序的原理:可以从最后一个元素开始,依次比较相邻两个元素,较小的数往上冒,一次循环结束,最小的元素上升到首位置,然后继续这样比较剩下的n-1个元素。冒泡排序及其优化 1 #include <iostream> 2 using namespace std; 3 4 5 //元素交换 6 void swap(int &a,int &b) 7 { 8 int temp=a; 9 a=b; 10 b=temp; 11 } 12 13 /*/////////////////////////////////////////////// 14 冒泡排序(未... 阅读全文

[转]函数指针简单讲解

2011-10-01 19:39 by ...平..淡..., 297 阅读, 0 推荐, 收藏,
摘要:本文出自http://www.wutianqi.com/?p=2721因为基本没用过函数指针,所以对这个概念及用法比较模糊,最近温习C++在,再次看见这个概念,于是百度了下,看见网上有很多关于函数指针的文章,不过在纷纷转载的过程中,格式上的错位,让人看着难受,我自己也简单的总结下,方便以后查阅。首先要清楚一个概念:1.数组的数组名就是这个数组的地址,也即数组第一个元素的地址(指针)。2.函数的函数名就是这个函数的入口地址(指针)。3.结构体的结构名不是这个结构的地址,要取得结构体的地址,必须得用&(取地址运算符)。其次,还得对函数指针,指针函数,数组指针,指针数组这四个容易混淆的概念区 阅读全文

求二进制数中1的个数

2011-09-29 12:00 by ...平..淡..., 166 阅读, 0 推荐, 收藏,
摘要:编程之美中有这道题,不过我比较喜欢上面的有一种方法,很简洁,如下: 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int v = 9,count=0; 6 while(v) 7 { 8 v&=(v-1); 9 count++;10 }11 cout<<count<<endl;12 return 0;13 }上次看到另一种方法,编程之美好像没有讲,感觉也很牛逼,如下: 1 /* 2 分析如下: 3 举个例子,给定一个数,为 10 01 ... 阅读全文

二维数组作为参数传递

2011-09-29 11:08 by ...平..淡..., 2013 阅读, 0 推荐, 收藏,
摘要:做 图的m--着色问题 的时候,在“二维数组作为参数传递给函数”的问题上果断阵亡(原先一直没怎么用过二维数组做参数传递),上网查了些资料,嘿嘿,搞清楚了,好好总结了下:问题描述:当二维数组作为参数传递给函数时,函数的形参不能简单地写双重指针,因为编译器实际寻址如下:对于数组 int p[m][n];如果要取p[i][j]的值,编译器是这样寻址的:p + i*n + j; 如果我们省略了第二维或者更高维的大小,编译器将不知道如何正确的寻址。因此如果我们在编写程序的时候需要用到各个维数都不固定的二维数组作为参数,虽然这个时候编译器还是不能识别,但我们可以把二维数组当做普通的指针,将它的大小用两个参 阅读全文

回溯法-------图的m--着色问题

2011-09-29 10:49 by ...平..淡..., 524 阅读, 0 推荐, 收藏,
摘要:在题目的求解过程中,遇到了关于将二维数组作为参数传递给函数的问题,纠结了半天,上网查了一些,我在下一篇日志中得总结一下了。。。图的m--着色问题 1 /* 2 图的m--着色问题分析: 3 通过解空间分析,可推断用回溯法求解。 4 限界条件:判断k点与其他点i存在边的情况下,为k点找到的颜色是否与i相同 5 */ 6 #include <iostream> 7 using namespace std; 8 9 int x[100];10 11 int NextColor(int k,int n,int m,int **G) //寻找下一种颜色 12 {13 w... 阅读全文

回溯法-------n皇后问题

2011-09-27 11:49 by ...平..淡..., 326 阅读, 0 推荐, 收藏,
摘要:n皇后问题 1 /* 2 n皇后问题 3 k表示行号,x[k]表示列号 4 */ 5 #include <iostream> 6 #include <cmath> 7 using namespace std; 8 int x[100]; 9 10 bool place(int k) //判断此位置是否可以放皇后11 {12 int i=0;13 while(i<k)14 {15 if( (x[i]==x[k]) || (abs(x[i]-x[k])==abs(i-k) ) )16 {17 ... 阅读全文

回溯法-------子集和数问题

2011-09-27 10:11 by ...平..淡..., 904 阅读, 0 推荐, 收藏,
摘要:用回溯法解决,需要找到一个限界条件来简化复杂度此题限界条件为 (s+r-w[k])>=M && (s+w[k+1])<=M子集和数 1 /* 2 子集和数问题 3 s代表目前选中的w[i]x[i]的结果,k代表选择的第几个数,r代表w[i]的和. 4 */ 5 #include <iostream> 6 using namespace std; 7 8 int x[100]; 9 10 void SumofSub(int s,int k,int r,int M,int *w)11 {12 x[k]=1;13 if(s+w[k]==M) ... 阅读全文

动态规划-------最大子段和

2011-09-26 10:55 by ...平..淡..., 306 阅读, 0 推荐, 收藏,
摘要:最大子段和 1 /* 2 b[]的递归式为 3 b[j]={ b[j-1]+a[j] , b[j-1]>=0 4 a[j] , b[j-1]<0 } 5 */ 6 #include <iostream> 7 using namespace std; 8 9 int MaxSum(int n, int *a)10 {11 int sum=0; 12 int b=0;13 for (int i=0;i<n;i++)14 {15 if (b>0) b+=a[i]; else b=a[i];16... 阅读全文

回溯法-------迷宫问题

2011-09-26 10:04 by ...平..淡..., 201 阅读, 0 推荐, 收藏,
摘要:迷宫问题 1 #include <iostream> 2 using namespace std; 3 4 int flag = 0; 5 const int m = 5; 6 const int n = 5; 7 int a[m][n] = { 8 {0,0,0,1,1}, 9 {1,0,0,0,0},10 {0,1,1,0,1},11 {1,0,0,0,0},12 {0,1,0,1,0}13 };14 void search(int x,int y)15 {16 if((x==m-1)&&(y... 阅读全文
上一页 1 ··· 11 12 13 14 15