Graph类的实现 ①构造函数 /将邻接矩阵的所有元素设为0,并将图的大小设 为0。 template<class T> Graph<T>:Graph (void) {for(i=0;i〈MaxGraphSize;i+) for(j=0;j<MaxGraphSize ;j++) edge[i][j]=0 graphsize =0
● Graph类的实现 ① 构造函数 //将邻接矩阵的所有元素设为0,并将图的大小设 为0。 template<class T> Graph<T>::Graph(void) { for( i = 0 ;i < MaxGraphSize ; i ++ ) for( j = 0 ;j < MaxGraphSize ;j ++ ) edge[i][j] = 0 ; graphsize = 0 ; }
②取得序号为v的顶点的第一个邻接顶点的序号 template<class T> int Graph<T>:GetFirstNeighbor(const int v) { for(int i=0;i graphsize i ++ if(Edge[v][i]>0&&Edge[v][i]<max return i 0123 return -1 0 03 58 1 3 0 004 2 5 00 02 3 84 2
② 取得序号为v的顶点的第一个邻接顶点的序号 template<class T> int Graph<T>::GetFirstNeighbor(const int v) { for( int i = 0 ; i < graphsize ; i + + ) if( Edge[v][i] > 0 && Edge[v][i] < max ) return i ; return – 1 ; } 0 1 2 3 0 3 5 8 3 0 ∞ 4 5 ∞ 0 2 8 4 2 0 0 1 2 3
③取得顶点v1相对于v2的下一个邻接顶点的序号 template<class T> int Graph<T>:GetNextNeighbor const int vl,const int v2 {if(v1!=-1&v2!=-1) for(int i=v2 +1 i graphsize i ++ if(Edge[v1][i]>0&&Edge[v1][i]max) return 1 0123 0 0358 return-1 1 3004 5002 3 8420
③取得顶点v1相对于v2的下一个邻接顶点的序号 template<class T> int Graph<T>::GetNextNeighbor ( const int v1 , const int v2 ) { if ( v1 ! = - 1 && v2 ! = - 1 ) { for(int i= v2 + 1 ; i < graphsize ; i ++ ) if( Edge[v1][i] > 0 && Edge[v1][i] < max ) return i ; } return – 1 ; } 0 1 2 3 0 3 5 8 3 0 ∞ 4 5 ∞ 0 2 8 4 2 0 0 1 2 3
2用邻接表存储的Graph类 。Graph类声明 //边结点的结构 template<class T> struct Edge friend class Graph<T>; int VerAdj;//邻接顶点序号 int cost;/边的权值 Edge*link;//指向下一个边结点的指针 Edge(){};//构造函数
2 用邻接表存储的Graph类 ● Graph类声明 // 边结点的结构 template<class T> struct Edge { friend class Graph<T> ; int VerAdj ; // 邻接顶点序号 int cost ; // 边的权值 Edge *link ; // 指向下一个边结点的指针 Edge( ){ } ; // 构造函数
/构造函数 Edge int d,int c):VerAdj(d), cost(c )link(NULL ){
// 构造函数 Edge ( int d , int c ): VerAdj( d ) , cost( c ) , link( NULL ) { }