私は単純な問題のように思えますが、私の人生にとってはわかりません。基本的に、私が探しているのは、特定の値が特定の位置にとどまる非対称行列のすべての順列を見つける方法です。これを説明する最も簡単な方法は、例を挙げて...C++で行列に困惑しました
この行列で
a b c
a
b c
d e f
...我々は次のことを持っていると言うが、私たちは「最初の文字はどちらかであるすべての順列を見つける必要がありさ2番目の文字は 'a'、3番目の文字は 'b'または 'c'、4番目の文字は 'd'、 'e'または 'f'です。我々のアルゴリズムでは、マトリックスのサイズは事前には分かっていない。それはちょうど私の最初の例でもあること...
a
b
c
d
か...
a b c d
e f g h
i j k l
m n o p
、私は可能性があることを観察して見ることができますことができます:
aabd
aabe
aabf
aacd
aace
aacf
babd
babe
babf
bacd
bace
bacf
cabd
cabe
cabf
cacd
cace
cacf
しかし、 、私はアルゴリズムを理解できません。誰も私の頭の中でこのことを手助けすることができますか?私が前もってサイズを知っていたら、私はそれをすることができましたが、私はしません。私は再帰関数のように感じる答えですが、私はそれを見ることができません。
EDIT:ここまでは値を行列に入れるためのコードです。いくつかのケースでは、値はスタンドアロンであり、それ以外では、それは括弧に囲まれた、複数の値のセットに付属しています...
int CountTestCases(const string &iTestStr, const map<string::size_type, string::size_type> &iHashTable)
{
vector<vector<char>> charMatrix;
string::const_iterator strIt = iTestStr.begin();
while(strIt != iTestStr.end())
{
if(*strIt == '(')
{
++strIt;
char c = *strIt;
vector<char> tmpVec;
tmpVec.push_back(c);
++strIt;
while(*strIt != ')')
{
c = *strIt;
tmpVec.push_back(c);
++strIt;
}
charMatrix.push_back(tmpVec);
}
else
{
char c = *strIt;
vector<char> tmpVec;
tmpVec.push_back(c);
charMatrix.push_back(tmpVec);
}
++strIt;
}
return 0;
}
*置換*は、固定数の要素を並べ替えることを意味します。ただし、サンプル出力が異なります。あなたは*デカルト製品*をしているようです。 –
@ M.M私は、OPがライン上の並べ替えによって元のマトリックスと異なるすべてのマトリックスを取得したいと思う。 –
@JulienLopezもしそれが本当であれば、最初の答えは '{acb、a、bc、def}'でしょう。これはOPの引用文 'aabd'と同じ形式ではありません –