2012-11-25 123 views
0

我有這樣的矩陣:矩陣相鄰元件組合

A B C 

D E F 

G H I 

我想獲得相鄰細胞和對角線單元的所有可能的組合與一個lenght,例如:

從開始:

- *ABC* right right 
- *ABE* right down 
- *ABF* right diagonal-right 
- *ABD* right diagonal-left 
- ecc ecc 

我試圖創建一個名爲「lettera」的新類,用字母作爲關鍵字,並用一個成員指示向右,向左,向下,向上ecc的指針。還有一個名爲「Sequenza」的成員,它是一個連接每個字母的字符串。

例如,如果有一個鍵,「B」,我有B->下== * E,B->左== * A,B->右== * C等等... 它的工作原理。然後我爲每個字母加上一個計數器:當它到達3時,它應該停止確定組合。

然後問題的核心:每個字母的路徑遵循...我試過創建一個遞歸函數,但它可以工作。

你能幫我看看這個或通過另一種方式暗示我嗎?

非常感謝。

代碼:

void decisione(lettera *c) { 

      if (c == nullptr) return ; 

      c->count++; 
      c->sequenza = c->sequenza + c->key; 

      if (c->count == 2) 
        cout << "\n" << c->sequenza; 
       //the sequence of letters accumulated in every call 
      decisione(c->Up); 
      decisione(c->Down); 

     } 

它給我,例如AAA和BBB,然後崩潰=(

+1

不會''B - > down''是''E''? – hinafu

+0

是的,這是真的,謝謝。錯誤...編輯它 –

+1

在調試器中運行以隔離並修復崩潰。 – djechlin

回答

1

開始在A,你能去哪裏B和D.假如你去到B ,現在,你可以去哪裏?A,C和E.你已經在A,你不想返回,所以你只有C和E.假設你選擇C,因爲你已經選擇了三個字母功能停止,然後你選擇E等(我不選擇對角線鄰居),這裏是程序:

#include <cstdio> 
#include <cstdlib> 

int a[] = {-1,-1,-1,0,0,1,1,1}, b[] = {-1,0,1,-1,1,-1,0,1},cont; 
char s[3],mat[3][3]; 
bool flag[9]; 

void display() { 
    for(int i = 0; i < 3; ++i) printf("%c",s[i]); 
    puts(""); 
} 

void show(int x,int y) {//You are in mat[x][y] 
    s[cont] = mat[x][y]; 
    if(cont == 2) { 
    display(); 
    return; 
    } 
    flag[mat[x][y] - 'A'] = true; 
    int xx,yy; 
    for(int i = 0; i < 8; ++i) { 
    xx = x + a[i], yy = y + b[i]; 
    if(0 <= xx and xx < 3 and 0 <= yy and yy < 3 and !flag[mat[xx][yy] - 'A']) { 
     ++cont; 
     show(xx,yy); 
     --cont; 
    } 
    } 
    flag[mat[x][y] - 'A'] = false; 

} 

int main() { 
    cont = 0; 
    for(int i = 0; i < 3; ++i) { 
    for(int j = 0; j < 3; ++j) { 
     mat[i][j] = ('A' + 3*i + j); 
    } 
    } 
    for(int i = 0; i < 3; ++i) { 
    for(int j = 0; j < 3; ++j) { 
     show(i,j); //You start from mat[i][j]: {'A','B','C',...,'I'} 
    } 
    } 
    return 0; 
} 
+0

非常感謝你的回答,但我真的不明白你的代碼=( –

+0

你究竟有什麼不明白的地方? – hinafu

+0

我不明白「國旗」的用法以及你爲什麼這樣做。 '...您的解決方案的總體思路是什麼? –