将它的输入格式要求改成在屏幕上输入两个序列X和Y,序列各元素数间都以一个空格分隔,输出格式不变#include<bits/stdc++.h> using namespace std; string X ; string Y ; vector<vector<int> > c; // 动态规划表 set<string> lcs; // set保存所有的LCS int lcs_length(int m, int n) { // 表的大小为(m+1)*(n+1) c = vector<vector<int> >(m+1,vector<int>(n+1)); for(int i=0; i<m+1; ++i) { for(int j=0; j<n+1; ++j) { // 第一行和第一列置0 if (i == 0 || j == 0) c[i][j] = 0; else if(X[i-1] == Y[j-1]) c[i][j] = c[i-1][j-1] + 1; else c[i][j] = max(c[i-1][j], c[i][j-1]); } } return c[m][n]; } void lcs_print(int i, int j, string lcs_str) { while (i>0 && j>0) { if (X[i-1] == Y[j-1]) { lcs_str.push_back(X[i-1]); // cout<<X[i-1]<<endl; --i; --j; } else { if (c[i-1][j] > c[i][j-1]) --i; else if (c[i-1][j] < c[i][j-1]) --j; else { lcs_print(i-1, j, lcs_str); lcs_print(i, j-1, lcs_str); return; } } } // cout<<lcs_str<<endl; reverse(lcs_str.begin(),lcs_str.end()); lcs.insert(lcs_str); } int main() { cin>>X>>Y; int m = X.length(); int n = Y.length(); int length = lcs_length(m, n); cout << "The length of LCS is " << length << endl; string str; lcs_print(m, n, str); set<string>::iterator it = lcs.begin(); for( ; it!=lcs.end(); it++) cout << *it << endl; return 0; }
时间: 2024-01-13 09:03:31 浏览: 72
好的,你的要求已经被记录下来了。对于你的问题,我理解的是你想要将输入方式改为在屏幕上输入两个序列X和Y,序列各元素数间都以一个空格分隔,输出格式不变。你可以将原来的X和Y字符串改为从屏幕读入的方式,即使用cin>>X>>Y;。具体修改后的代码如下:
```c++
#include<bits/stdc++.h>
using namespace std;
string X, Y;
vector<vector<int> > c; // 动态规划表
set<string> lcs; // set保存所有的LCS
int lcs_length(int m, int n) {
// 表的大小为(m+1)*(n+1)
c = vector<vector<int> >(m+1,vector<int>(n+1));
for(int i=0; i<m+1; ++i)
{
for(int j=0; j<n+1; ++j)
{
// 第一行和第一列置0
if (i == 0 || j == 0)
c[i][j] = 0;
else if(X[i-1] == Y[j-1])
c[i][j] = c[i-1][j-1] + 1;
else
c[i][j] = max(c[i-1][j], c[i][j-1]);
}
}
return c[m][n];
}
void lcs_print(int i, int j, string lcs_str) {
while (i>0 && j>0)
{
if (X[i-1] == Y[j-1])
{
lcs_str.push_back(X[i-1]); //cout<<X[i-1]<<endl;
--i;
--j;
}
else
{
if (c[i-1][j] > c[i][j-1])
--i;
else if (c[i-1][j] < c[i][j-1])
--j;
else
{
lcs_print(i-1, j, lcs_str);
lcs_print(i, j-1, lcs_str);
return;
}
}
}
//cout<<lcs_str<<endl;
reverse(lcs_str.begin(),lcs_str.end());
lcs.insert(lcs_str);
}
int main() {
cin>>X>>Y;
int m = X.length();
int n = Y.length();
int length = lcs_length(m, n);
cout << "The length of LCS is " << length << endl;
string str;
lcs_print(m, n, str);
set<string>::iterator it = lcs.begin();
for( ; it!=lcs.end(); it++)
cout << *it << endl;
return 0;
}
```
这样就能够实现在屏幕上输入两个序列X和Y,序列各元素数间都以一个空格分隔,输出格式不变的要求了。
阅读全文