#include "Astar.h"
#include "fileout.h"
#include <iostream>
using namespace std;
#include <ctime>
Astar::Astar(){
}
Astar::~Astar(){
m_close.clear();
m_open.clear();
}
Knoten Astar::aktive(Knoten k1,Knoten k2){
Suchproblem pro(k1,k2);
m_pro = pro;
m_open.push_front(pro.m_start);
time_t begin,end;
double time;
begin = clock();
while(!loop()) update();
end = clock();
time = (double)(end-begin) / (double)(CLOCKS_PER_SEC * 1e-6);
cout << "Time: " << time << " microseconds (" << time*1e-6 << " seconds)" << endl;
return m_aktiverKnoten;
}
void Astar::update(){
Knoten tmp_Knoten;
list<Knoten> mylist;
mylist = m_pro.generiere_alle_nachfolger(m_aktiverKnoten);
for(list<Knoten>::iterator it=mylist.begin(); it!=mylist.end();it++){
tmp_Knoten = *it;
if(m_pro.pruefen_vorhanden(tmp_Knoten,m_open)==false && m_pro.pruefen_vorhanden(tmp_Knoten,m_close)==false){
for(int i=0;i<9;i++){
if(tmp_Knoten.getState()[i] != m_pro.m_ziel.getState()[i]) tmp_Knoten.m_heuristik++;
}
m_open.push_back(tmp_Knoten);
}
}
}
void Astar::select(){
Knoten tmp_Knoten;
list<Knoten>::iterator ti;
m_aktiverKnoten=m_open.front();
_quicksort(m_open,m_open.begin(),m_open.end());
for(list<Knoten>::iterator it=m_open.begin();it!=m_open.end();it++){
tmp_Knoten=*it;
if(m_aktiverKnoten.m_heuristik+m_aktiverKnoten.m_depth >= tmp_Knoten.m_heuristik+m_aktiverKnoten.m_depth){
m_aktiverKnoten = tmp_Knoten;
ti=it;
}
}
m_close.push_back(m_aktiverKnoten);
m_open.erase(ti);
}
bool Astar::loop(){
select();
if(m_pro.pruefen(m_aktiverKnoten, m_pro.m_ziel)==true){
return true;
}
return false;
}
void _quicksort(list<Knoten> mylist,list<Knoten>::iterator left,list<Knoten>::iterator right){
Knoten left_K, right_K;
int left_i, right_i;
left_K = *left;
right_K = *right;
left_i=left_K.m_heuristik+left_K.m_depth;
right_i=right_K.m_heuristik+right_K.m_depth;
if(left_i<right_i){
int pivot = right_i;
list<Knoten>::iterator l = left;
list<Knoten>::iterator r = right;
do{
while(left_i > pivot) left++;
while(left_i > pivot) right++;
if(left_i <= right_i){
list<Knoten>::iterator swap;
swap=left;
right = swap;
left++;
right--;
}
}while(left_i<=right_i);
_quicksort(mylist,left,r);
_quicksort(mylist, l,right);
}
}
Kann mir jemand sagen was ich falsch mache?
obj/Release/Astar.o||In function `Astar::select()'😐
Astar.cpp:(.text+0x12d5)||undefined reference to `Astar::_quicksort(std::list<Knoten, std::allocator<Knoten> >, std::_List_iterator<Knoten>, std::_List_iterator<Knoten>)'|
||
= Build finished: 1 errors, 0 warnings =|
der Aufruf ist im Select()