#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;
}
信息生物学 谁写过动态规划算法 我只写出了打分矩阵 ,写过的给我看看吧