2013-05-11 112 views
0

我已經編寫了解決最長公共子序列問題的代碼。只需要定義m個X維的二維表。我已經將它定義爲一個全局變量,但它拋出了容量超出的錯誤。LCS的二維陣列表

#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]); 
} 

我正在考慮使用矢量矢量,但然後是否有可能在同一時間定義大小爲m x w?正常的

vector < vector <int> > lcs 

不足以作爲我想預先定義矢量並使用下標操作符在代碼中訪問它。

回答

1

是的,你可以只要所有內部載體應該是相同的大小。

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

第一個參數是所述count(多少對象最初應當在vector),第二個參數是用於初始化每個那些的值。在上述情況下,您最終將得到9000個矢量,每個矢量用數字23的9000倍填充。

構造函數is here的完整列表。

+0

OK.WIthout object name form is allowed – devsaw 2013-05-11 21:57:22

+0

@DamnDev對不起,我不明白。什麼樣的形式是允許的,哪些對象名稱不存在? – pmr 2013-05-11 22:05:36

2
std::vector< std::vector<int> > lcs(m, std::vector<int>(w)); 
3

使用

vector<vector<int>> lcs(m, vector<int>(w)); 

創建一個大小m x w的 「載體的載體」。

此操作,因爲這兩個參數的std ::向量構造的:

vector(size_type n, const value_type& val = value_type()); 

這需要大小n作爲第一個參數,並作爲其第二個參數的值val,所以有vector<int>(w)m份,即大小爲wvector<int>m副本(默認值爲int(),即0)。

參考