我正面临一个问题...... 我有一个方阵(比如6x6),需要计算所有唯一(不重复)的小方阵......
(注意:为了找到大方形NxN矩阵内未重复的唯一rxr方阵的数量,我们可以使用“ncr”ex:6x6矩阵有6c2个较小的2x2唯一矩阵,这是15)
所以要求是: 我有6x6矩阵,我希望得到所有可能的组合来计算所有未重复的5x5,4x4,....到2x2矩阵。
这是我的代码的一部分,它负责提取从3x3到NxN的唯一方矩阵
string line;
int normalCnt = 0;
int lastCnt = 12;
for(int a=2; a<k; a++){
for(int b=1; b<=k-a; b++){
for(int c=b+a; c<=k; c++){
line = "det_"+static_cast<ostringstream*>( &(ostringstream() << a+1) )->str()+"x"+static_cast<ostringstream*>( &(ostringstream() << a+1) )->str()
+"#("+static_cast<ostringstream*>( &(ostringstream() << parameter) )->str()+") U_"+static_cast<ostringstream*>( &(ostringstream() << lastCnt++) )->str()
+"(";
for(int d=b; d<b+a; d++)
line = line + "c"+static_cast<ostringstream*>( &(ostringstream() << k-a) )->str()+static_cast<ostringstream*>( &(ostringstream() << d) )->str()+"_i,";
line = line + "c"+static_cast<ostringstream*>( &(ostringstream() << k-a) )->str()+static_cast<ostringstream*>( &(ostringstream() << c) )->str()+"_i,";
for(int e=b; e<=b+a; e++)
line = line + "mat_"+static_cast<ostringstream*>( &(ostringstream() << a) )->str()+"x"+static_cast<ostringstream*>( &(ostringstream() << a) )->str()+"["
+static_cast<ostringstream*>( &(ostringstream() << normalCnt++) )->str()+"],";
line = line + "mat_"+static_cast<ostringstream*>( &(ostringstream() << a+1) )->str()+"x"+static_cast<ostringstream*>( &(ostringstream() << a+1) )->str()+"["
+static_cast<ostringstream*>( &(ostringstream() << lastCnt) )->str()+"]);";
myfile<<line<<"\n";
}
}
normalCnt -= lastCnt;
myfile << "\n";
}
让我解释一下究竟需要什么...... 如果我有一个6x6矩阵,它有六个5x5独特的方形矩阵,每个5x5矩阵有五个4x4唯一矩阵.....如果我可以直接找到6x6矩阵中的唯一4x4矩阵,我可以简单地将它们传递给另一个用于计算5x5矩阵而不重复这些4x4矩阵的函数,依此类推。 在这里,我在彼此内部使用循环:
我想知道是否有其他算法可能会使用递归或其他技术来解决这个问题