爱嘉牛LA

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

随笔分类 -  计算机算法

摘要:#includeusing namespace std;int main(){ const int N=4; int count; count=0; for(int i=1;i<=N;i++) for(int j=0;j<=N;j++) if(j==i) continue; else for(int k=0;k<=N;k++) if(k!=j&&k!=i) { cout<<i<<j<<k<<endl; count++... 阅读全文
posted @ 2014-03-28 13:57 爱嘉牛LA 阅读(268) 评论(0) 推荐(0)

该文被密码保护。
posted @ 2013-10-29 08:54 爱嘉牛LA 阅读(1) 评论(0) 推荐(0)

摘要:1.求给定一乱序数据,找出第k小的数据View Code 1 #include<iostream> 2 #include<stdlib.h> 3 using namespace std; 4 5 template<class Type> 6 void Swap(Type *a,Type *b){ 7 Type temp; 8 temp=*a; 9 *a=*b;10 *a=temp;11 }12 template<class Type>13 Type select(Type a[],int L,int R,int k){ 14 //计算a[L:R. 阅读全文
posted @ 2013-01-28 11:35 爱嘉牛LA 阅读(517) 评论(0) 推荐(0)

该文被密码保护。
posted @ 2012-12-23 21:30 爱嘉牛LA 阅读(4) 评论(0) 推荐(0)

该文被密码保护。
posted @ 2012-12-19 16:17 爱嘉牛LA 阅读(4) 评论(0) 推荐(0)

摘要:View Code #include<iostream>using namespace std;int n;float c;float bestv=0;float backknap(float w[],float v[],int bestx[],int x[],float sw,float sv,int t){ int j; float r; //剩余物品的总价值 if(t>=n){ if(sv>bestv){ //如果解比当前解更优 bestv=sv; fo... 阅读全文
posted @ 2012-12-15 16:00 爱嘉牛LA 阅读(444) 评论(0) 推荐(0)

摘要:View Code #include<iostream>using namespace std;#define N 100int x[N];//x[i]存储当前i节点的颜色种类 int a[N][N];//存储各个顶点之间的连接情况 int sum=0;//记录有多少种涂色方案 bool OK(int k,int n){ for(int j=1;j<=n;j++) if(a[k][j]==1&&x[j]==x[k])//如果找到一个与预想把K节点涂色为x[k]的相连节点,且该节点也涂色为x[k],则涂色失败 return false; retu... 阅读全文
posted @ 2012-11-22 10:58 爱嘉牛LA 阅读(1384) 评论(1) 推荐(0)

摘要:View Code #include<iostream>using namespace std;struct Object{ float w; float v; float w_v; int order; //物品的序号 float x;//是否放入背包,整个放入是1,一部分放入是放入的部分与总的比值,没放入为0 };Object object[100];int compare( const void *a , const void *b ) { Object *aa=(Object *)a; Object *bb=(Object... 阅读全文
posted @ 2012-11-13 20:45 爱嘉牛LA 阅读(249) 评论(0) 推荐(0)

摘要:View Code #include<iostream>using namespace std;#define max 100 float d[max];//m台机器的空闲时间存储在d[m]中int s[max][max];//把第j个作业放到第i太机器上去运行 typedef struct homework{//数据结构来存储作业信息 int ID; float time; }hw;typedef struct m{//快结构体的因为是把在改机器的作业存起来 int number;//记录存储在改机器的作业个数 int ma[max]; float time... 阅读全文
posted @ 2012-11-10 09:56 爱嘉牛LA 阅读(433) 评论(0) 推荐(0)

摘要:View Code #include<iostream>using namespace std;#define maxn 100int huffTreeN;//树中的节点个数初始化为nint i1=1,i2=2;struct element{//存储字符 double weight;//字符出现的概率为实数,次程序为了简便,不计算其概率,而直接用其出现的次数代替 int lchild;//该节点的左孩子在huffTree[]数组中的下标 int rchild;//该节点的右孩子在huffTree[]数组中的下标 int parent; //该节点的双亲节点在hu... 阅读全文
posted @ 2012-11-10 09:55 爱嘉牛LA 阅读(204) 评论(0) 推荐(0)

摘要:Prim算法设G=(V,E)是连通图,V={1,2,......,n}构造G的最小生成树的Prim算法的基本思想是:首先置S={1},然后,只要S是V的真子集,就坐如下的贪心选择:选取满足条件i属于S,j属于V-S,且c[i][j]最小边,并将顶点j添加到S中。这个过程一直进行到S=V时为止View Code #include<iostream>using namespace std;#define max 100float c[max][max];//存放i,j的权值float lowcost[max];//lowcost[v]存放未放入生成树的一个顶点v到生成树所有顶点的最短边 阅读全文
posted @ 2012-11-10 09:54 爱嘉牛LA 阅读(197) 评论(0) 推荐(0)

摘要:Kruskal算法1.首先将G的n个顶点看成n个孤立的连通分支,将所有的边按权从小到大排序e1,e2,e3...em2.从第一条边开始,依边权递增的顺序查看每一条边,并按下述方法连接两个不同的两同分支3.当查看到第K条边ek=(v,w)时,若v,w分别在两个不同而连通分支T1和T2中,用边(v,w)将T1,T2连接成一个连通分支,然后继续查看k+1条边 若v和w在当前的同一个连通分支中,就直接查看第k+1条边(既构成圈,就放弃ek) 这个过程一直进行到之剩下一个连通分支时为止。此时,这个连通分支就是G的一颗最小生成树了View Code #include<iostream>usin 阅读全文
posted @ 2012-11-10 09:43 爱嘉牛LA 阅读(277) 评论(0) 推荐(0)

摘要:View Code #include<iostream>using namespace std;int maxleft=0,maxright=0;//记录最大字段和起点和终点 int MaxSubsum(int *a,int left,int right){ int sum=0; if(left==right) sum=a[left]>0?a[left]:0; else{ int center=(left+right)/2; int leftsum=MaxSubsum(a,left,center); int right... 阅读全文
posted @ 2012-10-23 22:28 爱嘉牛LA 阅读(678) 评论(0) 推荐(0)

摘要:算法分析:设list是含有n个不同字符的字符串,perm(list,k-1,n)为list[0]~list[k-1]的所有全排列,perm(list,k,n)为list[0]~list[k]的全排列,perm(list,k-1,n)处理的字符个数比perm(list,k,n)处理的的字符少一个,假设perm(list,k-1,n)可求,对于list[k]位置,可以取list[0]~list[k]的任何值,再组合per(list,k-1,n),这得到perm(list,k,n).View Code #include int num=0;inline void Swap(char *a, char 阅读全文
posted @ 2012-10-16 18:35 爱嘉牛LA 阅读(167) 评论(0) 推荐(0)

摘要:问题:在2^k*2^k个方格组成的棋盘中,若恰有一个方格与其他方格不同,称该方格为一个特殊方格,且称该棋盘为一特殊棋盘。思路:显然特殊在棋盘上出现的位置有4^k中情况。因而对任何K>=0,有4^k中不同的特殊棋盘。当k>0时,将2k×2k的棋盘分成4个2k-1×2k-1的子棋盘。特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘无特殊方格。为了将这3个无特殊方格的子棋盘转化为特殊棋盘,我们可以用一个L型骨牌覆盖这 3个较小棋盘的汇合处,这3个子棋盘上被L型骨牌覆盖的方格就成为该棋盘上的特殊方格,从而将问题转化为4个较小规模的棋盘覆盖问题。递归地使用这种分割,知道 阅读全文
posted @ 2012-10-16 18:33 爱嘉牛LA 阅读(287) 评论(0) 推荐(0)

摘要:分析可以看:http://www.cnblogs.com/hoodlum1980/archive/2008/10/11/1308493.htmlView Code #includeint p( int n , int m ) ;int main(){ int n; int Num = 0 ; /*划分数*/ cout>n; Num = p(n,n); coutn时,由于m不能大于n,否则就会有负数出现了*/ /*因此只能表示成最大加数不大于n的划分*/ if( n < m ) return p( n , n ) ; /*当m==n时,首先可以有一... 阅读全文
posted @ 2012-10-10 21:17 爱嘉牛LA 阅读(214) 评论(0) 推荐(0)

摘要:View Code #include<iostream>using namespace std;//int n1=5,m1=10//不可以传到函数做参数,如fun[n1][m1],不可以,既是[]内不可以是变量 #define m1 10 //有n个物品,背包能承载的重量是m #define n1 5int Max(int a,int b){ return a>=b? a:b;}int DynamicProgramming(int n,int m,int W[],int Value[],int V[n1+1][m1+1],int X[]){ /* int n,m;//有n个. 阅读全文
posted @ 2012-06-30 00:21 爱嘉牛LA 阅读(309) 评论(0) 推荐(0)

摘要:#includeusing namespace std;void move(char a,char c){ cout">m; cout<<"The steps to moving"<<m<<"diskes:"<<endl; fun1(m,'A','B','C'); system("pause"); return 0;} 阅读全文
posted @ 2012-04-20 21:35 爱嘉牛LA 阅读(197) 评论(0) 推荐(0)