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

  • 2
  • 0
  • 约6.88千字
  • 约 13页
  • 2023-10-11 发布于未知
  • 举报

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

算法实验报告 实验一 用分治法实现元素选择 实验代码: #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)

1亿VIP精品文档

相关文档