1
こんにちは私は最小一般的なサブシーケンス問題のプログラムを書いている、2次元論理に詰まった
2次元配列渡しと横断で立ち往生。親切に助けてください。
以下はコードです。私が合格する/ 2次元の配列を横断バックトラック内ことはできませんよと私は基本的に親切に助けて... lcs_lengthからバックトラック機能を()の呼び出しで
を立ち往生しています
void backtrack(char x[], char y[], int L[][7], int m, int n)
{
if(m == 0 || n == 0)
return;
else if(x[m-1] == y[n-1])
{
backtrack(x, y, L, m-1, n-1);
cout << x[m-1] << " ";
}
else
{
if(L[m-1][n] > L[m][n-1])
backtrack(x, y, L, m-1, n);
else
backtrack(x, y, L, m, n-1);
}
}
int lcs_length(char x[], char y[], const int m, const int n)
{
int L[m+1][n+1];
for(int i=0; i<=m; i++)
{
for(int j=0; j<=n; j++)
{
if(i == 0 || j == 0)
L[i][j] = 0;
else if (x[i-1] == y[j-1])
L[i][j] = L[i-1][j-1] + 1;
else
L[i][j] = max (L[i-1][j], L[i][j-1]);
}
}
backtrack(x, y, L, m+1, n+1);
return L[m][n];
}
int main(int argc, char *argv[])
{
char x[] = "ABCDGH";
char y[] = "AEDFHR";
int m = sizeof x/sizeof *x;
int n = sizeof y/sizeof *y;
cout << lcs_length(x, y, m, n);
return EXIT_SUCCESS;
}
..
ありがとう。
'int m = sizeof x/sizeof * x;という行は何ですか? int n = sizeof y/sizeof * y; 'これは意図したものですか? –
int m = sizeof x/sizeof * x; int n = sizeof y/sizeof * y; >>は文字列x、yの長さを計算します。 g ++コンパイラで実行されます.. – AGeek
あなたはC++を使用していますが、依然としてCスタイルの配列を使用していますか?あなたはできるだけ早くベクトルに切り替える必要があり、あなたの人生を楽にします。そしてあなたが持っている問題をまったく解決しないでください。 – LiKao