算法实验代码.docVIP

  • 3
  • 0
  • 约4.22千字
  • 约 8页
  • 2017-12-22 发布于河南
  • 举报
算法实验代码

算法实验代码 附录1:求矩阵连乘的最少计算次数的源代码 #include stdafx.h #includestdlib.h #includestdio.h int _tmain(int argc, _TCHAR* argv[]) { return 0; } void main() { void MatrixChain(int *p,int n,int **m,int **s); void TraceBack(int i,int j,int **s); int n; int i,j; int *p,**m,**s; printf(请输入矩阵的个数:\n); scanf(%d,n); printf(请按顺序输入第一个矩阵的行数和所有矩阵的列数:\n); p=(int *)malloc((n+1)*sizeof(int)); for(i=0;i=n;i++) scanf(%d,p[i]); m=(int **)malloc((n+1)*sizeof(int *)); for(i=0;i=n;i++) { m[i]=(int *)malloc(n*sizeof(int)); } s=(int **)malloc((n+1)*sizeof(int *)); for(i=0;i=n;i++) { s[i]=(int *)malloc((n+1)*sizeof(int)); } for(i=0;i=n;i++) for(j=0;j=n;j++) {m[i][j]=0;s[i][j]=0;} MatrixChain(p,n,m,s); TraceBack(1,n,s); printf(\n); system(pause); } void MatrixChain(int *p,int n,int **m,int **s) { int i,j; for(i=1;i=n;i++) m[i][i]=0; for(int r=1;r=n-1;r++) for(i=1;i=n-r;i++) { j=i+r; m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j]; s[i][j]=i; for(int k=i+1;kj;k++) { int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]; if(tm[i][j]) { m[i][j]=t; s[i][j]=k; } } } printf(\n\n最优值矩阵m[i][j]:\n); for(i=1;i=n;i++) { for(j=1;j=n;j++) { printf(%d\t,m[i][j]); } printf(\n); } } void TraceBack(int i,int j,int **s) { if(i==j)return; TraceBack(i,s[i][j],s); TraceBack(s[i][j]+1,j,s); printf(\nA%d到A%d断点位置:A%d\n,i,j,s[i][j]); } 附录2:动态规划法解决0-1背包问题的源代码 #include stdafx.h int _tmain(int argc, _TCHAR* argv[]) { return 0; } #includestdio.h #includestdlib.h void main() { void Knapsack(float *v,int *w,int c,int n,float **m); void Traceback(float **m,int *w,int c,int n,int *x); float max(float m,float n); int min(int m,int n); int i,j; int c; int n; printf(\t**本程序利用动态规划法解决0-1背包问题**\n\t对输入数据的要求:\n\t\tvalue[]:float;\n\t\tweight[]:integer;\n\t\tcapacity:integer\n); printf(请输入待选物品的数量:); scanf(%d,n); int *x,*w; float *v,**m; x=(int *)malloc((n+1)*sizeof(int)); for(i=0;i=n;i++) x[i]=0; v=(float *)malloc((n+1)*sizeof(float)); prin

文档评论(0)

1亿VIP精品文档

相关文档