C ++中的矩阵相邻元素组合

时间:2012-11-25 15:28:54

标签: c++ recursion matrix

我有这个矩阵:

A B C

D E F

G H I

我希望得到相邻单元格和对角单元格的所有可能组合,其长度为 3 ,例如:

从A:

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

我尝试创建一个名为“lettera”的新类,其中包含字母键,以及指示向右,向左,向下,向上ecc的指针的成员。还有一个名为“sequenza”的成员,这是一个连接每个字母的字符串。

例如,如果a具有键,“B”,则具有B-> down == * E,B-> left == * A,B-> right == * 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 个答案:

答案 0 :(得分: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;
}