Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //iterates to the next permutation lexicographically
- NPlayersBijection NPlayersBijection::operator++()
- {
- for(int e=playersPartition1.size()-1; e >= 0; e--)
- {
- for(int k=playersPartition1[e].size()-2; k>=0; k--)
- {
- if(playersBijection[playersPartition1[e][k] ] < playersBijection[playersPartition1[e][k+1] ])
- {
- for(int l=playersPartition1[e].size()-1; l>k; l--)
- {
- if(playersBijection[playersPartition1[e][k] ] < playersBijection[playersPartition1[e][l] ])
- {
- swap(playersBijection[playersPartition1[e][k] ], playersBijection[playersPartition1[e][l] ]);
- for(int i=k+1, j=playersPartition1[e].size()-1; i<=j; i++, j--)
- swap(playersBijection[playersPartition1[e][i] ], playersBijection[playersPartition1[e][j] ]);
- if(isIdentity(e))
- break;
- else
- return *this;
- }
- }
- break;
- }
- }
- //resets the current partition to the identity
- for(int p=0; p<(int)playersPartition1[e].size(); p++)
- playersBijection[playersPartition1[e][p] ] = identity[playersPartition1[e][p] ];
- }
- return *this;
- };
Add Comment
Please, Sign In to add comment