2017-02-26 13 views
-1

プログラミング問題の本からこの問題文が得られました。私は水平の回文を見つけることができますが、行全体が回文である場合に限ります。2D行列(水平、垂直、対角)でのパリドロムの発見

どうすれば実現できますか?また、どのように対角線パリドロームを取得することができますか?
疑似コードも大丈夫です。私はこれの背後にある基本的なロジックが必要です。私は残りを実行します。 ありがとうございます。

+2

ようこそ -

ここで私は同じことを解決しようとしていたとき、私は戻っていたコードです!これまでのところあなたの研究/デバッグの努力を示してください。まず[Ask]ページをお読みください。 –

答えて

1

水平回文を見つけるには、行全体を1つ取り、それをさまざまな文字列に分割します。それが完了したら、その文字列が回文かどうかをチェックする必要があります。垂直ストリングの場合、列に対して同じことを行う必要があります。

対角線の場合は、端の点から始まり、最後に到達するまで右下に行くために斜め前方に移動する必要があります(+ [1] [1])。今度は、すべての斜めの文字列を得るのに役立つあらゆるエッジの戦術的なポイントごとに続けてください。次にこれらの文字列を分割し、これらの短い文字列が回文かどうかを確認する必要があります。

これは、おそらく動的プログラミングの下に来るでしょう。私は混乱しているにもかかわらず、それは貪欲なアプローチの下に来るかもしれません。私は教授と一度確認します。スタックオーバーフローへ

#define PALLEN 2 

#include <stdio.h> 
#include <string.h> 

int a[10][10]; 

/*int a[5][5] = { 
     { 1, 2, 1, 3, 5 } , 
     { 4, 5, 6, 7, 4 } , 
     { 4, 5, 5, 4, 1 } , 
     { 1, 9, 2, 1, 4 } , 
     { 1, 9, 4, 1, 5 } 
};*/ 
int n=0; 

void checkPalindrome(char*); 
void diagonalPal(); 
void stringSpliter(char*); 

int main() { 

    int i, j, k, l, x; 
    int c = 0; 
    int jmp; 
    int ptr = 0; 

    int diag; 

    char recycler[20]; 
    char diaglist[25]; 
    char revdiaglist[25]; 

    system("cls"); 

    printf("\nEnter the dimension (n) of this square matrix i.e. (n*n) - "); 
    scanf("%d", &n); 

    printf("\nNow enter the elements for this %d*%d matrix - ", n,n); 
    for(i=0;i<n;i++) 
     for(j=0;j<n;j++) 
      scanf("%d", &a[i][j]); 



    for(i=0;i<n;i++){ 
     for(j=0;j<n;j++){ 
      printf("-%d-", a[i][j]); 
     } 
     printf("\n"); 
    } 


    printf("\nHorizontal Palindromes"); 
    for (i = 0; i < n; i++) { 
     for (j = n-1, k = PALLEN; j > 0; j--, k++) { 
      while (c < j) { 
       jmp = c; 
       memset(recycler, 0, 20); 
       ptr = 0; 
       for (l = 0; l < k; l++) { 
        recycler[ptr] = a[i][jmp]; //0,0 -- 0,1 
        ptr++; 
        jmp++; 
       } 
       checkPalindrome(recycler); 
       c++; 
      } 
      c = 0; 
     } 

    } 

    printf("\n\nVertical Palindromes"); 
    for (i = 0; i < n; i++) { 
     for (j = n-1, k = PALLEN; j > 0; j--, k++) { 
      while (c < j) { 
       jmp = c; 
       memset(recycler, 0, 20); 
       ptr = 0; 
       for (l = 0; l < k; l++) { 
        recycler[ptr] = a[jmp][i]; //0,0-- 1,0 
        ptr++; 
        jmp++; 
       } 
       checkPalindrome(recycler); 
       c++; 
      } 
      c = 0; 
     } 
    } 


    printf("\n\nDiagonal Palindromes"); 
    diagonalPal(); 

} 

void stringSpliter(char *a){ 

    int i,j,k,ptr,jmp,c=0,l; 
    int len; 
    len = strlen(a); 

    char recycler[20]; 

    for (j = len-1, k = PALLEN; j > 0; j--, k++) { 
     while (c < j) { 
      jmp = c; 
      memset(recycler, 0, 20); 
      ptr = 0; 
      for (l = 0; l < k; l++) { 
       recycler[ptr] = a[jmp]; //0,0 -- 0,1 
       ptr++; 
       jmp++; 
      } 
      checkPalindrome(recycler); 
      c++; 
     } 
     c = 0; 
    } 

} 

void diagonalPal(){ 

    int i, x=0, j, k, ptr=0; 
    char diagrecycler[20]; 

    for(i = 0; i < n; i++){ 

     memset(diagrecycler, 0, 25); 
     ptr = 0; 
     for(j = i, k = 0; j < n, k < n; j++, k++){ 
      diagrecycler[ptr++] = a[j][k]; 
     } 
     stringSpliter(diagrecycler); 
    } 

    for(i = 1; i < n; i++){ 

     memset(diagrecycler, 0, 25); 
     ptr = 0; 
     for(j = 0, k = i; j < n, k < n ;j++, k++){ 
      diagrecycler[ptr++] = a[j][k]; 
     } 

     stringSpliter(diagrecycler); 
    } 

} 


void checkPalindrome(char *string){ 

    int isPalindrome = 1, i=0; 
    char rev[20]; 

    strcpy(rev, string); 
    strrev(rev); 

    isPalindrome = strcmp(rev, string); 

    if(isPalindrome == 0){ 
     printf("\n"); 
     while(string[i]!='\0') printf("%d", string[i++]); 
    } 

} 

// Output 
/*Enter the dimension (n) of this square matrix i.e. (n*n) - 4 

Now enter the elements for this 4*4 matrix - 1 2 3 4 
5 2 1 6 
8 1 1 8 
9 5 3 2 
-1--2--3--4- 
-5--2--1--6- 
-8--1--1--8- 
-9--5--3--2- 

Horizontal Palindromes 
11 
8118 

Vertical Palindromes 
22 
11 
3113 

Diagonal Palindromes 
121 
212 
G:\Code snippets\C programmes>*/ 
+0

ありがとう –

関連する問題