我已经编写了解决最长公共子序列问题的代码,只需要定义m X w维的二维表即可。我已将其定义为全局变量,但它抛出了容量超出错误。

#define FOR(i,n) for( i = 0; i < n ; ++ i)
int LCS(const char M[],int m, const char W[], int w)
{
    // m length of M w length of W
    int ans,min,i,j;
    // lcs table needs to be defined with required dimensions
    min = ( m >= w ) ? w : m;

    FOR(i,m)
        FOR(j,w)
        {
            if (i == 0 || j == 0)
                lcs[i][j] = 0; // repetitive
            else if (M[i] == W[j] )
                lcs[i][j] = lcs[i-1][j-1] + 1;
            else
                lcs[i][j] = max(lcs[i-1][j],lcs[i][j-1]);
        }

        return (min == lcs[m-1][w-1]);
}


我正在考虑使用vector的vector,但是是否可以同时将大小定义为m x w?正常

vector < vector <int> > lcs


不够,因为我想预先定义向量并使用下标运算符(如代码中所示)进行访问。

最佳答案

是的,只要所有内部向量的大小都应相同即可。

std::vector< std::vector<int> > v(9000, std::vector<int>(9000, 23));


第一个参数是count(最初应在vector中有多少个对象),第二个参数是用于初始化每个对象的值。在上述情况下,您最终得到9000个向量,每个向量都填充有9000乘以数字23。

vector构造函数is here的完整列表。

10-06 09:20