2016-08-04 13 views
0

私は最長の共通部分列問題を解決しようとしていました。私はポインタの変換に整数配列の問題に直面している。私の2D配列の最後の要素が結果になります。ここに私のコードです:ポインタから配列への型変換

#include<iostream> 
#include<cstring> 
using namespace std; 

char firstSequence_X[999999],secondSequence_Y[999999]; 
int length_M,length_N; 


void LCS_LENGTH(char*,char*); 

int main(void) 
{ 
    LCS_LENGTH(firstSequence_X,secondSequence_Y); 
    return 0; 

} 

void LCS_LENGTH(char X[],char Y[]) 
{ 
    //scan 
    cout<<"Enter first sequence : "; 
    cin>>X; 
    length_M=strlen(X); 
    cout<<"Enter second sequence : "; 
    cin>>Y; 
    length_N=strlen(Y); 
    cout<<endl; 
    cout<<"First sequence's length is : "<<length_M<<endl; 
    cout<<"Second sequence's length is : "<<length_N<<endl; 
    //declare 2 matrix : C for length , B for sign 
    int C[length_M+1][length_N+1],B[length_M+1][length_N+1]; 
    //loop variable 
    int i,j; 
    //clear all 
    for(i=0;i<=length_M;i++) 
    { 
     C[i][0]=0; 
     B[i][0]='n'; 
    } 
    for(j=0;j<=length_N;j++) 
    { 
     C[0][j]=0; 
     B[0][j]='n'; 
    } 
    //dp 
    for(i=1;i<=length_M;i++) 
    { 
    for(j=1;j<=length_N;j++) 
    { 
     if(X[i]==Y[j]) 
     { 
      C[i][j]=C[i-1,j-1]+1;//diagonal+1 
      B[i][j]='d'; 
     } 
     else if(C[i-1][j]>=C[i][j-1]) 
     { 
      C[i][j]=C[i-1,j];//up row copy 
      B[i][j]='u'; 
     } 
     else 
     { 
      C[i][j]=C[i-1,j];//left column copy 
      B[i][j]='l'; 
     } 
    } 
} 
cout<<endl<<"C[i,j] :"<<endl; 
for(i=0;i<=length_M;i++) 
{ 
    for(j=0;j<=length_N;j++) 
    { 
     cout<<C[i][j]<<" "; 
    } 
    cout<<endl; 
} 
cout<<endl<<"B[i,j] :"<<endl; 
for(i=0;i<=length_M;i++) 
{ 
    for(j=0;j<=length_N;j++) 
    { 
     cout<<B[i][j]<<" "; 
    } 
    cout<<endl; 
} 
} 

私はBとCの配列を印刷する必要があります。しかし、このエラーメッセージが表示されます:int *からintへの無効な変換。私の間違いを訂正してください。 TIA

+0

*すべきですか?コンパイラによる*完全なエラー/警告出力ですか?あなたの質問を編集して、どこにエラーや警告が出るのかを示すマーカーを表示し、完全な逐語的なコンパイラメッセージを含めてください。 –

+0

はい完全なエラーです。 http://imgur.com/EQ39IcG – 000

+1

また、C++には[可変長配列](https://en.wikipedia.org/wiki/Variable-length_array)がありませんので、コードは技術的にC++ではありません。いくつかのコンパイラはそれを拡張子として持っていますが、それに依存しません。また、スタック(配列を含むローカル変数のようなもの)が格納されるスタックは制限されているため、スタック上に大きな配列を持つとスタック空間を使い果たす可能性があります。古いCスタイルの文字列や配列の代わりに 'std :: string'と' std :: vector'を使うことをお勧めします。 –

答えて

3

あなたは次のことを間違っているように見えます。

C[i][j]=C[i-1,j-1]+1;//diagonal+1 

iは
C[i][j]=C[i-1,j];//up row copy 

C[i][j]=C[i-1][j];//up row copy 

である必要があり、これは

C[i][j]=C[i-1][j-1]+1;//diagonal+1 

されるべきだと思います

は*エラーや警告を得るために行う

C[i][j]=C[i-1][j];//left column copy 
関連する問題