2D ポイント (2D 配列の x、y 座標) のすべての順列を調べたいと思います。私の 2D ポイント構造体は次のとおりです。
struct pos_t {
int x; int y;
pos_t(){x = 0 ; y = 0;}
pos_t(int X, int Y){x=X; y=Y;}
pos_t(pos_t const & r) {x = r.x; y=r.y;}
pos_t& operator=(pos_t const & r) {x = r.x; y=r.y; return *this;}
bool operator < ( pos_t& p2)
{
return (x+y) < (p2.x+p2.y);
}
friend ostream& operator << (ostream &o, const pos_t& p)
{
return o << "(" << p.x << "," << p.y << ")";
}
};
pos_t のベクトルを使用して、treasurePos ( vector<pos_t>
) を呼び出すと、次のコードを使用して、別の順列を反復し、それぞれを表示します。
do {
copy(begin(treasurePos), end(treasurePos), ostream_iterator<pos_t>(cout, " -> "));
cout << endl;
} while ( std::next_permutation(begin(treasurePos),end(treasurePos)) );
しかし、私のベクトルに次の pos_t 要素がある場合: (0,2) および (1,0) 順列は 1 つしか得られません。(0,2) -> (1,0) ->
私は持っていると思っていました:
(0,2) -> (1,0) ->
(1,0) -> (0,2) ->
別の例では、2 つの順列しか得られない 4 つのポイントがあります。
(1,3) -> (2,2) -> (3,0) -> (3,1) ->
(1,3) -> (2,2) -> (3,1) -> (3,0) ->
アイデアはありますか?