[英]Matrix adjacent elements combinations in C++
我有这个矩阵:
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->下== * 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,然后它崩溃=(
从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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.