⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seqalignment2.cpp

📁 使用动态规划方法进行序列比对的模拟程序,用递归实现
💻 CPP
字号:
//动态规划 递归 序列比对
//得分矩阵:匹配+1,失配0,空位-1
# include <stdio.h>
# include <iostream.h>

# define SEQULEN 23

int scores[SEQULEN][SEQULEN]={0};
char sequ1[SEQULEN+1]={"GAAGGTTCCCGCCGCTATCGTAT"},
	 sequ2[SEQULEN+1]={"AAGGTTCCCGAACCGCTATTATC"};
int p(int i,int j);
int score(int i,int j);
int max(int a,int b,int c);

void main()
{
	cout<<"sequ1:"<<sequ1<<endl;
	cout<<"sequ2:"<<sequ2<<endl;
	
	cout<<" |"<<sequ1<<endl;
	cout<<"-+"<<"--------------------"<<endl;
	for(int i=0;i<SEQULEN;i++)
	{
		cout<<sequ2[i]<<"|";
		for(int j=0;j<SEQULEN;j++)
		{
			if(sequ2[i]==sequ1[j]) cout<<"*";
			else cout <<" ";
		}
		cout<<endl;
	}

	for(i=0;i<SEQULEN+1;i++)
	{
		for(int j=0;j<SEQULEN+1;j++)
			cout<<score(i,j)<<" " ;
		cout<<endl;
	}

	char cntn;
	cout<<"输入'f'+'回车键'继续"<<endl;
	cin>>cntn;
}
int score(int i,int j)
{
	if(i==0)
	{
		if(j==0) return 0;
		else return score(0,j-1)+(-1);
	}
	else
	{
		if(j==0) return score(i-1,0)+(-1);
		else return max(score(i-1,j-1)+p(i,j),score(i-1,j)+(-1),score(i,j-1)+(-1));
	}
}
int p(int i,int j)
{
	if(sequ1[i-1]==sequ2[j-1]) return 1;
	else return 0;
}
int max(int a,int b,int c)
{
	if(a>=b)
	{
		if(a>=c) return a;
		else return c;
	}
	else 
	{
		if(b>=c) return b;
		else return c;
	}
}

void inputSequ()
{
	char sequ1[SEQULEN],sequ2[SEQULEN];
	cout<<"input sequ1:"<<endl;
	for(int i=0;i<SEQULEN;i++)
	{
		cin>>sequ1[i];
	}
	cout<<"input sequ2:"<<endl;
	for(i=0;i<SEQULEN;i++)
	{
		cin>>sequ2[i];
	}
	cout<<"sequ1:"<<sequ1<<endl;
	cout<<"sequ2:"<<sequ2<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -