#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<string.h> typedef struct matrics { int m,n;//统计字符串输入的长度 char a[200],b[200]; //存储对比序列 int c[200][200];//构造打分矩阵 }matricse,* pmatrics; int max(int,int,int); //求三个数中最大值的数 void sequence(pmatrics);//输入序列 void matrics(pmatrics,int,int,int,int);//构造打分矩阵 void main() { int xx,xy,x,y; //打分规则 printf("A(x,x)= "); scanf("%d",&xx); printf("A(x,y)= "); scanf("%d",&xy); printf("A(x,-)= "); scanf("%d",&x); printf("A(-,y)= "); scanf("%d",&y); char c=getchar(); matricse s; s.a[0]=s.b[0]=' '; sequence(&s); /*printf("%c\n",s.a[0]); printf("%c\n",s.a[1]); printf("%c\n",s.a[2]); printf("%c\n",s.a[3]); printf("%d\n",s.n);*/ matrics(&s,xx,xy,x,y); } void sequence(pmatrics s) //输入比对序列 { s->m=s->n=0; char c; printf("请输入S序列,以空格结束输入\n"); while(c=getchar()) { if(c==' ') break; else { s->a[++s->m]=c; } } printf("请输入T序列,以空格结束输入\n"); c=getchar(); while(c=getchar()) { if(c==' ') break; else { s->b[++s->n]=c; } } } void matrics(pmatrics s,int xx,int xy,int x,int y) //构造打分矩阵 { int i,j; int v1,v2,v3; //算最大的分值 s->c[0][0]=0; for(j=1;j<=s->n;j++) //构造行 { s->c[0][j]=s->c[0][j-1]+y; } for(i=1;i<=s->m;i++) //构造列 { s->c[i][0]=s->c[i-1][0]+x; } /*for(j=0;j<=s->n;j++) { printf("%d ",s->c[0][j]); } printf("\n"); for(j=0;j<=s->m;j++) { printf("%d ",s->c[j][0]); }*/ for(i=1;i<=s->m;i++) //构造剩下的矩阵行数和列数 { for(j=1;j<=s->n;j++) { if(s->a[i]==s->b[j]) {v1=s->c[i-1][j-1]+xx;} else {v1=s->c[i-1][j-1]+xy;} v2=s->c[i-1][j]+x; v3=s->c[i][j-1]+y; s->c[i][j]=max(v1,v2,v3); } } //输出矩阵 printf(" "); for(j=0;j<=s->n;j++) printf("%3c ",s->b[j]); printf("\n\n"); for(i=0;i<=s->m;i++) { printf("%c ",s->a[i]); for(j=0;j<=s->n;j++) { printf("%4d ",s->c[i][j]); } printf("\n\n"); } } int max(int a,int b,int c) { int t=0; if(a>=b) t=a; else t=b; if(t>=c) return t; else return c; }
信息生物学 谁写过动态规划算法 我只写出了打分矩阵 ,写过的给我看看吧