LCS待完成

待續:待研究,比較最長子序列和最長子串,研究後綴數組和後綴樹


LCS實現代碼:


#include <iostream>
using namespace std;

int c[8][7],b[8][7];

void lcs_length(char *X,char *Y)
{
	int m = strlen(X);
	int n = strlen(Y);
	for ( int i = 0; i <=m; i++)c[i][0] = 0;
	for(int j = 0; j <=n; j++)c[0][j] = 0;
	
	for(int i = 1; i <=m; i++)
		for (int j = 1; j <=n; j++)
		{
			int s_i = i - 1;
			int s_j = j - 1;
			if (X[s_i] == Y[s_j])
			{
					c[i][j] = c[i-1][j-1]+1;
					b[i][j] = 2;
			}
			else
			{
				if (c[i-1][j] >= c[i][j-1])
				{
					c[i][j] = c[i-1][j];
					b[i][j] = 3;
				}
				else
				{
					c[i][j] = c[i][j-1];
					b[i][j] = 1;
				}
			}
		}
}

void print_lcs(char *X,int i,int j)
{
	if (i == 0 || j == 0)return;
	if (b[i][j] == 2)
	{
		print_lcs(X,i-1,j-1);
		int s_i = i - 1;
		cout<<X[s_i];
		//cout<<"*";
	}
	else if(b[i][j] == 1) print_lcs(X,i-1,j);
	else print_lcs(X,i,j-1);
}

int main()
{
	char *s1 = "ABCBDAB";
	char *s2 = "BDCABA";
	lcs_length(s1,s2);
	print_lcs(s1,7,6);
	system("pause");
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章