最后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的时候就会崩溃。