for循环后基本代码停止工作

时间:2019-07-11 18:49:47

标签: c++

我有一个非常简单的代码来查找LCS。问题不在于算法,而是其他。在for循环中获取最后一个输入后,代码停止工作。

我试图找出为什么会发生这种情况,并看到当我注释掉我的LCS_string函数时,代码可以正常运行。但是,这行代码是在打印完之后的,所以我不知道它如何或为什么会影响打印。

vector<int> str1, str2;
vector<vector<int> > dp;
stack<int> s;

int LCS(int a, int b){
    if(dp[a][b] != -1){
        return dp[a][b];
    }
    if(a == 0 || b == 0){
        dp[a][b] = 0;
        return dp[a][b];
    }
    if(str1[a-1] == str2[b-1]){
        dp[a][b] = LCS(a-1, b-1) + 1;
        return dp[a][b];
    }
    dp[a][b] = max( LCS(a-1, b), LCS(a, b-1) );
    return dp[a][b];
}

void LCS_string(int a, int b){
    cout << "in lcs_string with: " << a << "  " << b << endl;
    if(dp[a][b] > dp[a-1][b] && dp[a][b] > dp[a][b-1]){
        s.push( str1[a-1] );//could also be y[b] as they are the same element
        LCS_string(a-1, b-1);
        return;
    }
    if(dp[a-1][b] > dp[a][b-1]){
        LCS_string(a-1, b);
        return;
    }
    else{
        LCS_string(a, b-1);
        return;
    }
}

int main(){
    int n, m;
    cin >> n >> m;
    int temp;
    for(int i = 0; i < n; i++){
        cin >> temp;
        str1.push_back(temp);
    }
    for(int i = 0; i < m; i++){
        cin >> temp;
        cout << i;
        str2.push_back(temp);
        cout << "done" << endl;//doesnt print anything when i == m-1
    }
    cout << "end of inputting" << endl;//is not outputted
    dp.resize( n + 1, vector<int>( m + 1, -1 ) );
    LCS( n, m );
    LCS_string(n, m);//when this line is commented out, the code works
    while(!s.empty()){
        cout << s.top();
        s.pop();
    }
}

我没有收到任何错误消息,或者程序终止,没有给出任何输出。

0 个答案:

没有答案