usingMaths.com
Demonstrating and showing pupils and students one application of Mathematics.



Versions on Permutation Algorithm in C++




loading...
Algorithm by: Educator usingMaths

Our Permutation code in C++.


Permutation Class Header File:


#pragma once

#include "Combination.h"
#include <array>

class Permutation : public Combination
{
public:
    Permutation();
    virtual ~Permutation();
    vector<vector<string>> possibleWordPermutations(vector<string>, unsigned short);
    void shuffleWord(vector<vector<string>>, unsigned);
private:
    unsigned index;
    vector<vector<string>> local_store;
protected:
    vector<vector<string>> perm_store;

};


Permutation Class File:


#include "stdafx.h"
#include "Permutation.h"

Permutation::Permutation() : Combination()
{
}

// till the ground for shuffle to grind on
vector<vector<string>> Permutation::possibleWordPermutations(vector<stringcandidatesunsigned short dimension) {
    perm_store = {};
    possibleWordCombinations(candidatesdimension);
    // illegal 'r' value
    if (comb_store.empty() || r == 1) {
        perm_store = comb_store;
    }
    else {
        vector<vector<string>> last_two = { {""""}, {""""} };
        for (unsigned i = 0; i < comb_store.size(); i++) {
            index = r - 1;
            // copy up last two elements of 'comb_store.get(i)'
            last_two[0][0] = last_two[1][1] = comb_store[i][index--];
            last_two[0][1] = last_two[1][0] = comb_store[i][index--];

            local_store = {};
            local_store.push_back(last_two[0]);
            local_store.push_back(last_two[1]);
            if (r > 2) {
                shuffleWord(local_store, i);
            }
            // add to final comb_store
            for (vector<stringpart : local_store) {
                perm_store.push_back(part);
            }
        }
    }
    return perm_store;
}

void Permutation::shuffleWord(vector<vector<string>> arg_storeunsigned i) {
    local_store = {};
    vector<string> members;
    for (unsigned j = 0; j < arg_store.size(); j++) {
        members = arg_store[j];
        // add 'index' 'comb_store[i]' element to this list of members
        members.push_back(comb_store[i][index]);

        int shift_index = members.size();
        // shuffle this pack of words
        while (shift_index > 0) {
            vector<vector<string>>::iterator iter;
            iter = search(local_store.begin(), local_store.end(), &members, &members + 1);
            // skip if already in store
            if (iter == local_store.end()) {
                local_store.push_back(members);
            }
            // interchange these two neighbours
            if (--shift_index > 0 && members[shift_index] != members[shift_index - 1]) {
                swap(members[shift_index - 1], members[shift_index]);
            }
        }
    }
    // Are there any elements left? repeat if yes
    if (index-- > 0) {
        shuffleWord(local_store, i);
    }
}


Permutation::~Permutation()
{
}


Main Class:


#include "stdafx.h"
#include "Permutation.h"
#include <vector>

#include <iostream>

using namespace std;

int main()
{
    vector<string> goods = { "Eno""Chidi""Olu""Ahmed""Osas""Gbeda" };
    Permutation perm;
    vector<vector<string>> result = perm.possibleWordPermutations(goods, 3);
    // print choices and operation
    cout << "\n[ ";
    for (string choice : perm.words) {
        cout << choice << "; ";
    }
    cout << "] permutation " << perm.r << ":\n\n";

    // print out permutations nicely
    int i = 0;
    for (vector<stringset : result) {
        i++;
        cout << i << ":    ";
        for (string member : set) {
            cout << member << "; ";
        }
        cout << "\n";
    }
    cout << "\nNumber of ways is " << result.size() << ".";

    return 0;
}


Try it out!

Ownership (1) Simplicity (0.0) Elegance (0.0)
loading...
colormap #003366 #336699 #3366CC #003399 #000099 #0000CC #000066 #006666 #006699 #0099CC #0066CC #0033CC #0000FF #3333FF #333399 #669999 #009999 #33CCCC #00CCFF #0099FF #0066FF #3366FF #3333CC #666699 #339966 #00CC99 #00FFCC #00FFFF #33CCFF #3399FF #6699FF #6666FF #6600FF #6600CC #339933 #00CC66 #00FF99 #66FFCC #66FFFF #66CCFF #99CCFF #9999FF #9966FF #9933FF #9900FF #006600 #00CC00 #00FF00 #66FF99 #99FFCC #CCFFFF #CCCCFF #CC99FF #CC66FF #CC33FF #CC00FF #9900CC #003300 #009933 #33CC33 #66FF66 #99FF99 #CCFFCC #FFFFFF #FFCCFF #FF99FF #FF66FF #FF00FF #CC00CC #660066 #336600 #009900 #66FF33 #99FF66 #CCFF99 #FFFFCC #FFCCCC #FF99CC #FF66CC #FF33CC #CC0099 #993399 #333300 #669900 #99FF33 #CCFF66 #FFFF99 #FFCC99 #FF9999 #FF6699 #FF3399 #CC3399 #990099 #666633 #99CC00 #CCFF33 #FFFF66 #FFCC66 #FF9966 #FF6666 #FF0066 #CC6699 #993366 #999966 #CCCC00 #FFFF00 #FFCC00 #FF9933 #FF6600 #FF5050 #CC0066 #660033 #996633 #CC9900 #FF9900 #CC6600 #FF3300 #FF0000 #CC0000 #990033 #663300 #996600 #CC3300 #993300 #990000 #800000 #993333
Drop Your Version!
Login Please!

colormap #003366 #336699 #3366CC #003399 #000099 #0000CC #000066 #006666 #006699 #0099CC #0066CC #0033CC #0000FF #3333FF #333399 #669999 #009999 #33CCCC #00CCFF #0099FF #0066FF #3366FF #3333CC #666699 #339966 #00CC99 #00FFCC #00FFFF #33CCFF #3399FF #6699FF #6666FF #6600FF #6600CC #339933 #00CC66 #00FF99 #66FFCC #66FFFF #66CCFF #99CCFF #9999FF #9966FF #9933FF #9900FF #006600 #00CC00 #00FF00 #66FF99 #99FFCC #CCFFFF #CCCCFF #CC99FF #CC66FF #CC33FF #CC00FF #9900CC #003300 #009933 #33CC33 #66FF66 #99FF99 #CCFFCC #FFFFFF #FFCCFF #FF99FF #FF66FF #FF00FF #CC00CC #660066 #336600 #009900 #66FF33 #99FF66 #CCFF99 #FFFFCC #FFCCCC #FF99CC #FF66CC #FF33CC #CC0099 #993399 #333300 #669900 #99FF33 #CCFF66 #FFFF99 #FFCC99 #FF9999 #FF6699 #FF3399 #CC3399 #990099 #666633 #99CC00 #CCFF33 #FFFF66 #FFCC66 #FF9966 #FF6666 #FF0066 #CC6699 #993366 #999966 #CCCC00 #FFFF00 #FFCC00 #FF9933 #FF6600 #FF5050 #CC0066 #660033 #996633 #CC9900 #FF9900 #CC6600 #FF3300 #FF0000 #CC0000 #990033 #663300 #996600 #CC3300 #993300 #990000 #800000 #993333
Remark!
Login Please!

colormap #003366 #336699 #3366CC #003399 #000099 #0000CC #000066 #006666 #006699 #0099CC #0066CC #0033CC #0000FF #3333FF #333399 #669999 #009999 #33CCCC #00CCFF #0099FF #0066FF #3366FF #3333CC #666699 #339966 #00CC99 #00FFCC #00FFFF #33CCFF #3399FF #6699FF #6666FF #6600FF #6600CC #339933 #00CC66 #00FF99 #66FFCC #66FFFF #66CCFF #99CCFF #9999FF #9966FF #9933FF #9900FF #006600 #00CC00 #00FF00 #66FF99 #99FFCC #CCFFFF #CCCCFF #CC99FF #CC66FF #CC33FF #CC00FF #9900CC #003300 #009933 #33CC33 #66FF66 #99FF99 #CCFFCC #FFFFFF #FFCCFF #FF99FF #FF66FF #FF00FF #CC00CC #660066 #336600 #009900 #66FF33 #99FF66 #CCFF99 #FFFFCC #FFCCCC #FF99CC #FF66CC #FF33CC #CC0099 #993399 #333300 #669900 #99FF33 #CCFF66 #FFFF99 #FFCC99 #FF9999 #FF6699 #FF3399 #CC3399 #990099 #666633 #99CC00 #CCFF33 #FFFF66 #FFCC66 #FF9966 #FF6666 #FF0066 #CC6699 #993366 #999966 #CCCC00 #FFFF00 #FFCC00 #FF9933 #FF6600 #FF5050 #CC0066 #660033 #996633 #CC9900 #FF9900 #CC6600 #FF3300 #FF0000 #CC0000 #990033 #663300 #996600 #CC3300 #993300 #990000 #800000 #993333
Edit Your Algorithm!
Login Please!

colormap #003366 #336699 #3366CC #003399 #000099 #0000CC #000066 #006666 #006699 #0099CC #0066CC #0033CC #0000FF #3333FF #333399 #669999 #009999 #33CCCC #00CCFF #0099FF #0066FF #3366FF #3333CC #666699 #339966 #00CC99 #00FFCC #00FFFF #33CCFF #3399FF #6699FF #6666FF #6600FF #6600CC #339933 #00CC66 #00FF99 #66FFCC #66FFFF #66CCFF #99CCFF #9999FF #9966FF #9933FF #9900FF #006600 #00CC00 #00FF00 #66FF99 #99FFCC #CCFFFF #CCCCFF #CC99FF #CC66FF #CC33FF #CC00FF #9900CC #003300 #009933 #33CC33 #66FF66 #99FF99 #CCFFCC #FFFFFF #FFCCFF #FF99FF #FF66FF #FF00FF #CC00CC #660066 #336600 #009900 #66FF33 #99FF66 #CCFF99 #FFFFCC #FFCCCC #FF99CC #FF66CC #FF33CC #CC0099 #993399 #333300 #669900 #99FF33 #CCFF66 #FFFF99 #FFCC99 #FF9999 #FF6699 #FF3399 #CC3399 #990099 #666633 #99CC00 #CCFF33 #FFFF66 #FFCC66 #FF9966 #FF6666 #FF0066 #CC6699 #993366 #999966 #CCCC00 #FFFF00 #FFCC00 #FF9933 #FF6600 #FF5050 #CC0066 #660033 #996633 #CC9900 #FF9900 #CC6600 #FF3300 #FF0000 #CC0000 #990033 #663300 #996600 #CC3300 #993300 #990000 #800000 #993333
Edit Your Remark!
Login Please!

Delete Post >

Delete Comment >

Please wait...