void printmaze()
{
cout<<"迷宫:"<<endl;
for(int i=0; i<MAZE_ROW; ++i){
for(int j=0; j<MAZE_COL; ++j)
cout<<maze[i][j];
cout<<endl;
}
cout<<"入口坐标为:("<<Bi<<","<<Bj<<")\n出口坐标为:("<<Ei<<","<<Ej<<")\n\n"<<endl;
}
//#############################################################//
早上的问题:
原来在这个程序里面,我用的是list作为open和close的容器,然而在使用<functional>中的sort对open排序时总是有9个错误,在MinGW Developer Studio里调试都一样,我就到处求教,我很是郁闷,下午睡了一觉,醒来想到list里面本身有sort成员函数,可能是<functional>中的sort不支持list,于是我按照的我的想法写了一个小的test代码来验证一下。哇噻,原来真是这样,看来问题就是出在这里。于是解决的办法有如下两种:
办法一:将list改为vector容器,相应的open.pop_front()改为open.erase(pop.begin());这样<functional>里的sort就可以比较对open表排序了。
办法二:对open排序的地方(及sort(open.bengin(),open.end().opensort()))改为open.sort(opensort() )不过这时opensort要改为如下结构:
struct opensort: public binary_function<int,int,bool>
{
bool operator () (const int& n1,const int& n2)const
{
map<int,GFN*>::iterator pos1,pos2;
pos1 = gmap.find(n1);
pos2 = gmap.find(n2);
return pos1->second->fn < pos2->second->fn;
}
};
这样,就没有问题了,哈哈,太好了,遇到问题,郁闷了一天,现在总算明白了
//#############################################################//
在这里谢谢一个朋友给的一个答复,他解释如下(其实不是这里的问题,但是他的答复让我知道了这个方法):