#include "genealgorithms.h"
+#include <queue>
using namespace std;
GeneSorter::ActionList GeneSorter::sort(const GeneOrder& go){
- return ActionList();
+ ActionList al;
+ GeneOrder temp(go);
+ while(countCycles(temp) != temp.size() - 1){
+ ActionList safe = safeActions(go);
+ if (safe.size() > 0){
+ safe[0](temp);
+ al.push_back(safe[0]);
+ }else
+ return ActionList(); //TODO: Need to handle other cases here.
+ }
+ return al;
}
GeneSorter::ActionList GeneSorter::safeActions(const GeneOrder& go){
if (countCycles(go) == go.size() - 1)
return ActionList();
ActionList al;
- al.push_back(SortAction(new ReverseAction(2,3)));
+ //al.push_back(SortAction(new ReverseAction(2,3)));
return al;
}
CPPUNIT_ASSERT_EQUAL(1ul,al.size());
CPPUNIT_ASSERT(al[0] == ReverseAction(2,3));
CPPUNIT_ASSERT(!(al[0] == ReverseAction(2,5)));
+
+ GeneOrder go3(_validPerm3.begin(),_validPerm3.end());
+ al = so.safeActions(go3);
+ CPPUNIT_ASSERT(al.size() > 0);
+ size_t cycles = countCycles(go3);
+ al[0](go3);
+ CPPUNIT_ASSERT(cycles < countCycles(go3));
}
};