最后return 0的时候程序却崩溃了是什么情况。析构函数我也检查过好像没有问题。
下面是Prim的代码:
#ifndef PRIM_H_INCLUDED #define PRIM_H_INCLUDED #include "Edge.h" #include "MinIndexHeap2.h" #include <vector> using namespace std; template <class Graph, class Value> class Prim { Graph G; bool *visited; MIHeap2<Value> heap; vector<Edge<Value>* > edgeto; vector<Edge<Value> > vec; Value minw; void prim( int i ) { class Graph::Iterator ite( G, i ); Edge<Value> *p; int j; visited[i] = true; for( p=ite.begin() ; !ite.end(); p=ite.next() ) { j=p->other(i); if( !visited[j] ) { if( !edgeto[j] ) { heap.insert( j, p->val() ); edgeto[j] = p; } else if( p->val() < heap[j] ) { heap.change( j, p->val() ); edgeto[j] = p; } } } } public: Prim( Graph& g, int v ): G(g), heap(v), vec(v-1) { int i,tmp; visited = new bool[v]; for( i=0 ; i<v ; i++ ) { visited[i] = false; edgeto.push_back(NULL); } vec.clear(); prim(0); while( !heap.isEmpty() ) { tmp = heap.popindex(); vec.push_back( *edgeto[tmp] ); prim(tmp); } minw=vec[0].val(); for( i=1 ; i<vec.size() ; i++) minw+=vec[i].val(); } ~Prim(){ delete []visited; } void min_path( vector<Edge<Value> >& vec_s ){ vec_s = vec; } Value min_weight() { return minw; } }; #endif // PRIM_H_INCLUDED
不调用这个Prim的时候return 0不会崩溃。包括单独使用最小堆。有了这个Prim在return 0的时候就会崩溃。