--- queensgui/src/queensmain.cpp 2007/07/19 21:34:15 1 +++ queensgui/src/queensmain.cpp 2007/07/25 19:39:37 15 @@ -27,16 +27,25 @@ #include + #include "queensmain.h" #include "board.h" #include "queens.h" -#include "solutionvector.h" -#include "solutionlist.h" -#include "solutionhash.h" -#include "solutionmnvector.h" + +#include "solution.h" +#include "solutionmatrix.h" +#include "solutionint.h" + +#include "containervector.h" +#include "containerlist.h" +#include "containerhash.h" +#include "containermnvector.h" +#include "containerminimalvector.h" #include "config.h" + + QueensMain::QueensMain(QWidget *parent, const char *name) : QDialog(parent, name) { @@ -74,9 +83,11 @@ m_sizeSelector->setValue( 8 ); m_board->setSize( 8 ); + m_storage = StorageInt; m_sortalgo = SortList; m_solutions = NULL; m_queens = NULL; + m_sol = NULL; connect(m_quit, SIGNAL( clicked() ), @@ -119,6 +130,11 @@ QueensMain::~QueensMain() { delete m_board; + + if (m_solutions != NULL) + delete m_solutions; + if (m_sol != NULL) + delete m_sol; } void QueensMain::start() @@ -129,31 +145,50 @@ m_list->clear(); m_status->setText( QString("Searching ...") ); + m_board->setMatrix(0); + if (m_queens != NULL) { m_queens->wait(); delete m_queens; + m_queens = 0; } if (m_solutions != NULL) delete m_solutions; switch (m_sortalgo) { case SortList: - m_solutions = new SolutionList(this); + m_solutions = new ContainerList(this); break; case SortVector: - m_solutions = new SolutionVector(this); + m_solutions = new ContainerVector(this); break; case SortHash: - m_solutions = new SolutionHash(this); + m_solutions = new ContainerHash(this); break; case SortMNVector: - m_solutions = new SolutionMNVector(this); + m_solutions = new ContainerMNVector(this); break; + case SortMinimalVector: + m_solutions = new ContainerMinimalVector(this); + break; } + + if (m_sol != NULL) + delete m_sol; + + switch(this->m_storage) { + case StorageInt: + m_sol = new SolutionInt(m_sizeSelector->value()); + break; + case StorageMatrix: + m_sol = new SolutionMatrix(m_sizeSelector->value()); + break; + } + m_elapsed.start(); m_time.start(); - m_queens = new Queens(this, m_solutions, m_sizeSelector->value() ,false); + m_queens = new Queens(this, m_sol, m_solutions, m_sizeSelector->value() ,false); m_queens->start(); } @@ -200,7 +235,7 @@ void QueensMain::showSolution() { int index = m_list->currentItem(); - Solution sol = m_solutions->solution( index ); + Solution* sol = m_solutions->solution( index ); m_board->setMatrix( sol ); } @@ -231,7 +266,7 @@ void QueensMain::uniqueSolutions() { - m_totalcount = m_solutions->numSolutions(); + m_totalcount = m_solutions->totalSolutions(); m_status->setText( QString("sorting ") + QString::number(m_totalcount,10).append(" solutions...") ); m_elapsed.restart(); @@ -254,14 +289,22 @@ { QPopupMenu *contextMenu = new QPopupMenu( this ); contextMenu->setCheckable( true ); - QLabel *caption = new QLabel("Sort algorithm", this); - caption->setAlignment( Qt::AlignCenter ); - contextMenu->insertItem( caption ); + QLabel *sortCaption = new QLabel("Container class", this); + sortCaption->setAlignment( Qt::AlignCenter ); + contextMenu->insertItem( sortCaption ); contextMenu->insertItem("List", this, SLOT( sortList() ), 0, 1); contextMenu->insertItem("Vector", this, SLOT( sortVector() ), 0, 2); contextMenu->insertItem("Hash", this, SLOT( sortHash() ), 0, 3); contextMenu->insertItem("M*N Vector", this, SLOT(sortMNVector()), 0, 4); + contextMenu->insertItem("Minimal Vector", this, SLOT(sortMinimalVector()), 0, 5); + + QLabel *storageCaption = new QLabel("Solution class", this); + storageCaption->setAlignment( Qt::AlignCenter ); + contextMenu->insertItem( storageCaption ); + contextMenu->insertItem("Matrix Solution", this, SLOT( storageMatrix() ), 0, 6); + contextMenu->insertItem("Int Solution", this, SLOT( storageInt() ), 0, 7); + switch (m_sortalgo) { case SortList: @@ -276,8 +319,21 @@ case SortMNVector: contextMenu->setItemChecked( 4, true); break; + case SortMinimalVector: + contextMenu->setItemChecked( 5, true); + break; } + switch (m_storage) { + case StorageMatrix: + contextMenu->setItemChecked(6, true); + break; + case StorageInt: + contextMenu->setItemChecked(7, true); + break; + } + + contextMenu->exec( event->globalPos() ); delete contextMenu; } @@ -314,3 +370,21 @@ m_sortalgo = SortMNVector; } +void QueensMain::sortMinimalVector() +{ + m_sortalgo = SortMinimalVector; +} + + +void QueensMain::storageInt() +{ + m_storage = StorageInt; +} + +void QueensMain::storageMatrix() +{ + m_storage = StorageMatrix; +} + + +