中国矿业大学计算机学院算法设计与分析实验报告_2.doc

中国矿业大学计算机学院算法设计与分析实验报告_2.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法实验报告 实验一 用分治法实现元素选择 实验代码: #includeiostream using namespace std; int main() { int a[100],n,x; int BinarySearch(int a[],const intx,int n); cout请输入n(n=100):; cinn; cout请输入n个整数:endl; for(int i=0;in;i++) { cina[i]; } cout请输入要查找的整数x:; cinx; if(BinarySearch(a,x,n)!=-1) coutx是数组中第BinarySearch(a,x,n)+1个数。endl; else coutx不是数组中的数。endl; return 0; } int BinarySearch(int a[],const int x,int n) { int left=0,right=n-1; while(left=right) { int middle=(left+right)/2; if(x==a[middle]) return middle; if(xa[middle]) left=middle+1; else right=middle-1; } return -1; } 实验效果图: 实验二 用动态规划法求解0/1背包问题 实验代码: #include iostream using namespace std; int main() { void Knapsack(int *v,int *w,int c,int n,int **m); void Traceback(int **m,int *w,int c,int n,int *x); int v[100],w[100],n,c,**m,x[100],i; m=new int *[100]; for(i=0;i100;i++) m[i]=new int[100]; cout请输入物品个数n:; cinn; cout请输入背包容量c:; cinc; cout请分别输入每个物品的价值:endl; for(i=1;i=n;i++) cinv[i]; cout请分别输入每个物品的重量:endl; for(i=1;i=n;i++) cinw[i]; Knapsack(v,w,c,n,m); Traceback(m,w,c,n,x); cout最优解为:endl; for(i=1;i=n;i++) coutx[i] ; coutendl; return 0; } int min(int a,int b) { if(ab) return b; else return a; } int max(int a,int b) { if(ab) return a; else return b; } void Knapsack(int *v,int *w,int c,int n,int **m) { int i,j; int jMax=min(w[n]-1,c); for(j=0;j=jMax;j++) m[n][j]=0; for(j=w[n];j=c;j++) m[n][j]=v[n]; for(i=n-1;i1;i--) { jMax=min(w[i]-1,c); for(j=0;j=jMax;j++) m[i][j]=m[i+1][j]; for(j=w[i];j=c;j++) m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]); } m[1][c]=m[2][c]; if(c=w[1]) m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]); } void Traceback(int **m,int *w,int c,int n,int *x) { for(int i=1;in;i++) { if(m[i][c]==m[i+1][c]) x[i]=0; else { x[i]=1; c-=w[i]; } x[n]=(m[n][c])?1:0; } } 实验效果图: 实验三 用贪心算法求解最小生成树 实验代码: #include iostream #define inf 10000 #define max 50 void prim(int g[max][max],int n) { int lowcost[max],closest[

您可能关注的文档

文档评论(0)

134****4355 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档