代码改变世界

随笔档案-2011年09月

求二进制数中1的个数

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

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

2011-09-29 10:49 by ...平..淡..., 514 阅读, 收藏, 编辑
摘要: 在题目的求解过程中,遇到了关于将二维数组作为参数传递给函数的问题,纠结了半天,上网查了一些,我在下一篇日志中得总结一下了。。。图的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 ...平..淡..., 321 阅读, 收藏, 编辑
摘要: 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 ...平..淡..., 896 阅读, 收藏, 编辑
摘要: 用回溯法解决,需要找到一个限界条件来简化复杂度此题限界条件为 (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 ...平..淡..., 294 阅读, 收藏, 编辑
摘要: 最大子段和 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 ...平..淡..., 198 阅读, 收藏, 编辑
摘要: 迷宫问题 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... 阅读全文
点击右上角即可分享
微信分享提示