信息生物学 谁写过动态规划算法 我只写出了打分矩阵

来源:互联网 发布:什么是组播mac地址 编辑:程序博客网 时间:2024/04/30 11:00

#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;elset=b;if(t>=c)return t;elsereturn c;}

信息生物学  谁写过动态规划算法  我只写出了打分矩阵 ,写过的给我看看吧  



原创粉丝点击