/ / 2d масивний стіл для LCS - c ++, вектор

2D таблиця масивів для LCS - c ++, вектор

Я написав код, щоб вирішити Longest CommonПослідовна проблема. Просто потрібна 2D таблиця розмірів 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]);
}

Я розглядаю використання векторного вектора, але чи можна визначити розмір як m x w в той же час? Нормальний

vector < vector <int> > lcs

не вистачить, тому що я хочу попередньо визначити вектори та отримати доступ до нього за допомогою оператора індексу, як у коді.

Відповіді:

1 для відповіді № 1

Так, ви можете стільки, скільки всі внутрішні вектори мають бути однакового розміру.

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

Перший аргумент - це count (скільки об'єктів спочатку має бути в vector), а другий аргумент - значення, яке використовується для ініціалізації кожного з них. У вищезгаданому випадку ви отримаєте 9000 векторів, кожен заповнений 9000 разів більше 23.

Повний список vector конструктори тут.


3 для відповіді № 2

Використовуйте

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

створити "вектор вектор" розміру m x w.

Це працює через два параметра std :: vector constructor:

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

який приймає розмір n як його перший параметр і значення val як його другий параметр, так і є m копії vector<int>(w), це m копії vector<int> від розміру w (з значеннями за замовчуванням int(), що становить 0).

Список літератури:


2 для відповіді № 3
std::vector< std::vector<int> > lcs( m, std::vector<int>( w ) );